我有偏好设置活动,它会根据偏好设置更改启动服务。 在服务上我想检测摇动动作。 我在下面的代码,当我在一个活动中使用它时工作正常,但是当我想在服务上使用它时,它就不会工作,这就是我在服务中使用我的震动探测器代码的方式,我的代码有什么问题?
public class back extends Service {
SensorManager mSensorManager;
ShakeEventListener mSensorListener;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
Toast.makeText(back.this, "Service Started", Toast.LENGTH_LONG).show();
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorListener = new ShakeEventListener();
mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {
public void onShake() {
Toast.makeText(back.this, "Shake!", Toast.LENGTH_SHORT).show();
}
});
}
protected void onResume() {
mSensorManager.registerListener(mSensorListener,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
}
protected void onPause() {
mSensorManager.unregisterListener(mSensorListener);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
}
我得到了“Service Started”Toast,这意味着服务已经启动,但在我摇动设备之后,我看不到“Shake!”吐司。我该怎么办。 谢谢你的到来。
答案 0 :(得分:0)
服务没有onResume和onPause http://developer.android.com/guide/components/services.html#Lifecycle
也可能出现服务显示Toast问题,验证代码是否使用LOG或显示这样的吐司
new Handler()。post(new Runnable(){ public void run(){ Toast.makeText(getApplicationContext(),“msg”,Toast.LENGTH_LONG)。show(); }
答案 1 :(得分:0)
删除Resume和onPause。它不是服务的一部分。将其替换为OnStartCommand()请参阅代码。
public int onStartCommand(Intent intent, int flags, int startId){
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(mShakeDetector, mAccelerometer, SensorManager.SENSOR_DELAY_UI,new Handler());
return START_STICKY;
}
应该这样做:)