1

多数のブロードキャスト レシーバーを実装し、ユーザー設定に基づいてサービス内に登録するアプリケーションを作成しました。サービスは、そのメソッドのいくつかを呼び出すアクティビティにバインドされています。ブロードキャスト レシーバーが呼び出されると、サービスが開始され (または、既に実行されている場合はサービスの onstart が呼び出され)、サービスに何をすべきかを伝える文字列が渡されます。私の問題は、アクティビティが破棄されると(戻るボタン)、サービスも破棄され、ブロードキャストレシーバーが強制終了されることです。

マニフェストに受信者を登録できることはわかっています。これは、受信者が呼び出されたときに、ユーザーがそのオプションを選択したかどうかを確認することを意味します。ただし、アプリケーションにとって重要なレシーバーの 1 つは、プログラムでのみ登録できる「android.intent.action.HEADSET_PLUG」です。

私の質問は、サービスが破棄されたときにこの放送受信機をアクティブにしておく方法はあるのでしょうか? そうでない場合、誰もこの問題の回避策を見ることができますか?

ありがとう、ロブ

4

1 に答える 1

3

私の問題は、アクティビティが強制終了されるとサービスが強制終了され、それによって放送受信機が強制終了されることです。

「killed」とは、ユーザーがタスクキラーまたは設定アプリの「ForceStop」でアプリを終了したことを意味する場合、「killed」が適切な動詞です。ただし、プロセス全体は「強制終了」されます。ここで説明する一連のイベントには従いません。

「強制終了」とは、ユーザーが[戻る]ボタンを使用してアクティビティを終了したことを意味します。これは、サービスを開始するのではなく、バインドすることを選択したためです。アクティビティの存続期間を超えてサービスの実行を継続する場合は、を使用する必要がありますstartService()。また、ユーザーがこのサービスを不要にしたことを示すことができるパスがあることを確認して、いつ呼び出すかを知っておく必要がありますstopService()

だから私の質問は、サービスが停止したときにこの放送受信機をアクティブに保つ方法はありますか?

いいえ。

そうでない場合は、この問題の回避策を誰かが見ることができますか?

サービスにバインドする代わりに(または場合によってはそれに加えて)、サービスを開始します。

于 2012-05-01T13:19:43.933 に答える