今天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;    @Overridepublic 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() {@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}@Overridepublic void onSensorChanged(SensorEvent event) {if(event.values[Z_ORATIATION] < CRITICAL_ANGLE){//screen upif(!pSensorOpened){pSensorOpened = true;mProximityWakeLock.acquire();//open PSensor function}} else if(pSensorOpened){//screen downpSensorOpened = false;mProximityWakeLock.release();//close PSensor function}}         };                       mSensorManager.registerListener(mGsensorListener, mGsensor, SensorManager.SENSOR_DELAY_GAME);}    @Overridepublic 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{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stub        Intent mIntent = new Intent(context, SensorFunctionService.class);        context.startService(mIntent);}}

Manifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.sensor.demo"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk android:minSdkVersion="7" /><uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DEVICE_POWER" />      <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />      <application        android:icon="@drawable/ic_launcher"        android:label="@string/app_name" >                <service android:name=".SensorFunctionService"></service>                   <receiver android:name=".BootCompletedReceiver">              <intent-filter>                  <action android:name="android.intent.action.BOOT_COMPLETED" />              </intent-filter>          </receiver>      </application></manifest>




更多相关文章

  1. 如何在后台运行Linux命令?
  2. Android动态控制手机屏幕方向
  3. Android官方文档-AsyncTask
  4. android activity Understand the Lifecycle Callback
  5. Android开发AsyncTask异步处理任务使用方法及注意事项
  6. android中完全退出应用程序的方法
  7. android studio 错误:“java.io.EOFException”
  8. Jetpack: ViewModelSavedState遇到的问题
  9. Android四大组件:Service史上最全面解析

随机推荐

  1. 定制替换Android桌面
  2. JDK10都发布了,nio你了解多少?
  3. 你不知道的,Java代码性能优化的 40+ 细节,
  4. [置顶] android利用zbar二维码扫描-(解决
  5. 还是初识
  6. X-Ray检测Android设备Root漏洞过程分析
  7. 源码实战 | 本地可跑,上线就崩?慌了!
  8. SQLite
  9. 图解源码 | MyBatis的Mapper原理
  10. 再见已是初识(初十)