[英]Android: Sensor ACCELEROMETER Not working in Service
我想通過“服務”檢測“后台”中移動設備的運動,但是我的服務什么都沒有收到。
這是我的服務
public class MyService extends Service implements SensorEventListener {
private SensorManager mSensorManager;
static int count=0;
private ShakeEventListener mSensorListener;
/** OnShakeListener that is called when shake is detected. */
public MyService() {
}
@Override//
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//registering Sensor
Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(mSensorListener,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
//then you should return sticky
return Service.START_STICKY;
}
@Override
public void onCreate() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onSensorChanged(SensorEvent se) {
// get sensor when Change
Toast.makeText(getApplicationContext(), "Detected", Toast.LENGTH_SHORT).show();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".MyService"
android:enabled="true"
android:exported="true"></service>
</application>
如果未顯示Sensor Change Toast,將不勝感激。
當我在OnCreate中添加以下行時,它起作用了
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
編輯的MyService
public class MyService extends Service implements SensorEventListener {
private SensorManager mSensorManager;
static int count=0;
private ShakeEventListener mSensorListener;
/** OnShakeListener that is called when shake is detected. */
public MyService() {
}
@Override//
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//registering Sensor
Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(mSensorListener,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
//then you should return sticky
return Service.START_STICKY;
}
@Override
public void onCreate() {
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//add this line only
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onSensorChanged(SensorEvent se) {
// get sensor when Change
Toast.makeText(getApplicationContext(), "Detected", Toast.LENGTH_SHORT).show();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.