In this example broadcasting screen wake / sleep event with a service.
Some times we have requirement to make less battery consumption then you can stop your services when phone is going to sleep mode and again start your services when phone is going to wake.
1. Create a service inside main activity to get screen wake / sleep broadcast events.
2. Create a broadcast receiver inside service to get screen wake / sleep events.
3. Send screen wake/sleep value from broadcast receiver to Service.
Define AEScreenOnOffService service in mainifest file.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidexample.screenonoff"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.androidexample.screenonoff.ScreenOnOff"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name="com.androidexample.screenonoff.AEScreenOnOffService">
<intent-filter>
<action android:name="com.androidexample.screenonoff.AEScreenOnOffService" />
</intent-filter>
</service>
</application>
</manifest>
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
public class ScreenOnOff extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_on_off);
// Start AEScreenOnOffService Service
Intent i0 = new Intent();
i0.setAction("com.androidexample.screenonoff.AEScreenOnOffService");
startService(i0);
}
}
Create service(AEScreenOnOffService.java) which will take care of screen wake sleep mode.
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
public class AEScreenOnOffService extends Service {
BroadcastReceiver mReceiver=null;
@Override
public void onCreate() {
super.onCreate();
// Toast.makeText(getBaseContext(), "Service on create", Toast.LENGTH_SHORT).show();
// Register receiver that handles screen on and screen off logic
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
mReceiver = new AEScreenOnOffReceiver();
registerReceiver(mReceiver, filter);
}
@Override
public void onStart(Intent intent, int startId) {
boolean screenOn = false;
try{
// Get ON/OFF values sent from receiver ( AEScreenOnOffReceiver.java )
screenOn = intent.getBooleanExtra("screen_state", false);
}catch(Exception e){}
// Toast.makeText(getBaseContext(), "Service on start :"+screenOn,
//Toast.LENGTH_SHORT).show();
if (!screenOn) {
// your code here
// Some time required to start any service
Toast.makeText(getBaseContext(), "Screen on, ", Toast.LENGTH_SHORT).show();
} else {
// your code here
// Some time required to stop any service to save battery consumption
Toast.makeText(getBaseContext(), "Screen off,", Toast.LENGTH_SHORT).show();
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onDestroy() {
Log.i("ScreenOnOff", "Service distroy");
if(mReceiver!=null)
unregisterReceiver(mReceiver);
}
}
Get screen wake sleep mode event broadcast and send received data again to service (AEScreenOnOffService.java)
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class AEScreenOnOffReceiver extends BroadcastReceiver {
private boolean screenOff;
@Override
public void onReceive(Context context, Intent intent) {
//Toast.makeText(context, "BroadcastReceiver", Toast.LENGTH_SHORT).show();
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenOff = true;
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOff = false;
}
// Toast.makeText(context, "BroadcastReceiver :"+screenOff, Toast.LENGTH_SHORT).show();
// Send Current screen ON/OFF value to service
Intent i = new Intent(context, AEScreenOnOffService.class);
i.putExtra("screen_state", screenOff);
context.startService(i);
}
}