The following code shows how to use server to react power Partial wake event.
Add permission for WAKE_LOCK
<?xml version="1.0" encoding="utf-8"?> <manifest ... <application android:label="@string/app_name" > <activity ... </activity> <service android:enabled="true" android:name=".TheService"> </service> </application> <uses-permission android:name="android.permission.WAKE_LOCK" /> </manifest>
Layout xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World" /> </LinearLayout>
Main activity Java vode
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; /*from w ww .j ava2 s . c om*/ public class MainActivity extends Activity { public static final String TAG = ServiceLockTest.class.getName(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public void onResume() { super.onResume(); startService(new Intent(this, TheService.class)); } }
Service Java code
import android.app.Notification; import android.app.Service; import android.content.BroadcastReceiver; import android.content.IntentFilter; import android.content.Context; import android.content.Intent; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.PowerManager.WakeLock; import android.os.PowerManager; import android.os.Process; import android.util.Log; //from w w w . j a va 2 s . co m public class TheService extends Service implements SensorEventListener { public static final String TAG = TheService.class.getName(); public static final int SCREEN_OFF_RECEIVER_DELAY = 500; private SensorManager mSensorManager = null; private WakeLock mWakeLock = null; /* * Register this as a sensor event listener. */ private void registerListener() { mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); } /* * Un-register this as a sensor event listener. */ private void unregisterListener() { mSensorManager.unregisterListener(this); } public BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "onReceive("+intent+")"); if (!intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { return; } Runnable runnable = new Runnable() { public void run() { Log.i(TAG, "Runnable executing."); unregisterListener(); registerListener(); } }; new Handler().postDelayed(runnable, SCREEN_OFF_RECEIVER_DELAY); } }; public void onAccuracyChanged(Sensor sensor, int accuracy) { Log.i(TAG, "onAccuracyChanged()."); } public void onSensorChanged(SensorEvent event) { Log.i(TAG, "onSensorChanged()."); } @Override public void onCreate() { super.onCreate(); mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF)); } @Override public void onDestroy() { unregisterReceiver(mReceiver); unregisterListener(); mWakeLock.release(); stopForeground(true); } @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); startForeground(Process.myPid(), new Notification()); registerListener(); mWakeLock.acquire(); return START_STICKY; } }