今天leader给的任务是这样的,做一个开机自启动的后台Service,实现对重力及距离的检测
当手机屏幕朝下时,让Psensor可用。否则不可用
实现代码如下:
SensorFunctionService.java
package com.sensor.demo;
import android.app.Service;
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.IBinder;
import android.os.PowerManager;
public class SensorFunctionService extends Service {
private static final String LOG_TAG = "SensorDemoActivity";
private static final int PROXIMITY_SCREEN_WAKE_LOCK = 32;
private static final float CRITICAL_ANGLE = -5.0f;
private static final int Z_ORATIATION = 2;
private SensorManager mSensorManager;
private Sensor mGsensor;
private SensorEventListener mGsensorListener;
private PowerManager pm;
private PowerManager.WakeLock mProximityWakeLock;
private boolean pSensorOpened;
@Override
public void onCreate() {
super.onCreate();
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mProximityWakeLock =
pm.newWakeLock(PROXIMITY_SCREEN_WAKE_LOCK, LOG_TAG);
mSensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
mGsensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
mGsensorListener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.values[Z_ORATIATION] < CRITICAL_ANGLE){//screen up
if(!pSensorOpened){
pSensorOpened = true;
mProximityWakeLock.acquire();//open PSensor function
}
} else if(pSensorOpened){//screen down
pSensorOpened = false;
mProximityWakeLock.release();//close PSensor function
}
}
};
mSensorManager.registerListener(mGsensorListener, mGsensor, SensorManager.SENSOR_DELAY_GAME);
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
BootCompletedReceiver.java
package com.sensor.demo;
import com.sensor.demo.SensorFunctionService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class BootCompletedReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Intent mIntent = new Intent(context, SensorFunctionService.class);
context.startService(mIntent);
}
}
Manifest.xml
package="com.sensor.demo"
android:versionCode="1"
android:versionName="1.0" >
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >