1

基本的に 1 つのウィジェットと 1 つのサービスであるアプリを開発しています。ウィジェットは、デバイスのバックグラウンドでサービスを実行するボタンにすぎません。したがって、ユーザーはボタンをクリックするだけで、UI で何も起こらず、サービスがバックグラウンドで開始されます。しかし、IntentService を使用して実装したバックグラウンド サービスが、ウィジェットのボタンがクリックされた後、バックグラウンドでデバイスの揺れを常にリッスンするようにしたいと考えています。加速度計センサーの変化をいつでも監視する必要があります。最後に、ユーザーがデバイスを振った場合に特定のアプリケーションを開きたいと考えています。

ウィジェット部分を実装しました。ボタンをクリックすると、サービスが実行されます。シェイク部分も実装しました。シェイクを取得して、シェイク後にいくつかのことを行うことができます。また、シェイク後に別のアプリケーションを開く方法も知っています。私はサービスを通じてこれを行うことはできません!だから私の質問はこれです:

  • IntentService クラスに SensorEventListener を実装する必要がありますか?
  • はいの場合、センサーを常にリッスンするには、この実装だけで十分ですか? onHandleIntent(Intent intent) で何をすればいいですか?!
  • 通常のアクティビティに実装されている場合、すべてのセンサーの変更は onSensorChanged(SensorEvent sensorEvent) でリッスンされます。その関数にすべてを入れなければならないということですか?onHandleIntent には何もありませんか?
  • 私もこの意図を持っており、ウィジェットからサービスに来ていますが、どうすればよいかわかりません! そのインテントを使用してintentServiceを開始しましたが、onHandleIntentを使用しないと、インテントにsetActionを渡すことができないため、役に立ちません!

この質問を確認しました: [アプリを「シェイク」していつでも応答する] しかし、サービスがバックグラウンドでどのようにリッスンするかについての詳細はわかりませんでした。

誰でも助けることができますか?

4

1 に答える 1

3

との両方Serviceを使用できますIntentService。ここで私はあなたのために働くはずの方法の1つを与えました. と の違いについては、このリンクServiceIntentService従ってください。

public class service extends Service implements SensorEventListener {
@Override

public void onCreate() {
    super.onCreate();
//register your sensor manager listener here
}

@Override
public void onDestroy() {
//unregister your listener here
}

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        //detect the shake and do your work here
    }

}
于 2014-03-02T10:26:11.593 に答える