android传感器Gsensor和Psensor的使用举例
16lz
2021-01-25
今天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>
更多相关文章
- 如何在后台运行Linux命令?
- Android动态控制手机屏幕方向
- Android官方文档-AsyncTask
- android activity Understand the Lifecycle Callback
- Android开发AsyncTask异步处理任务使用方法及注意事项
- android中完全退出应用程序的方法
- android studio 错误:“java.io.EOFException”
- Jetpack: ViewModelSavedState遇到的问题
- Android四大组件:Service史上最全面解析