0

設定の変更時にサービスを開始する設定アクティビティがあります。サービスで揺れを検出したい。以下にあるこのコードは、アクティビティで使用すると正常に動作しますが、サービスで使用したい場合は機能しません。これは、サービスでシェイク検出器コードを使用した方法です。私のコードの何が問題なのですか?

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」トーストが表示されましたが、デバイスを振った後、「Shake!」が表示されません。トースト。私は何をすべきか。よろしくお願いします。

4

2 に答える 2

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;
   }

それはトリックを行う必要があります:)

于 2014-05-20T22:47:54.610 に答える
0
  1. サービスには onResume と onPause がありません http://developer.android.com/guide/components/services.html#Lifecycle

  2. コードがログを使用していることを確認するか、このようにトーストを表示することを確認するために、サービスからの表示トーストにも問題がある可能性があります。

    new Handler().post(new Runnable() { public void run() { Toast.makeText(getApplicationContext(), "msg", Toast.LENGTH_LONG).show(); }

于 2012-12-08T18:59:47.787 に答える