3

起動時に開始するサービス S があります。これには、何らかの処理を行うためにインテントサービス X を開始する contentobserver C があります。デフォルトのアクティビティ A は、ユーザーによって開始されます。

A を停止せずに実行中のサービス S にバインドして、結果レシーバー R を S に渡し、それを X に渡すことができるかどうかを知りたいです。

これを実現して、今度は C から解放され、R をパーセル可能なエクストラとしてバインドされたサービス S から、X を再び開始できるようにしたいと考えています。R を介して、実行されるたびに進行状況ダイアログが A で更新されます。

結果レシーバーで運試しをする前は、サポート ライブラリの通知を使用していました。しかし、問題は、ループの反復ごとにそれらを作成して再度表示していたことです。アラート音が 300 回くらい繰り返して、不快でした。

ブロードキャストで運を試してみましたが、いくつかの悪い経験がありました。それでそれらを捨てました。

この問題を回避する他の方法はありますか? 通知を再度ビルドして更新する方法があれば、私の問題は解決する可能性があります。

私は 4.1.1 ビルド、setlatesteventinfo が廃止されたように見える API 16 を使用しています。

実行中の通知を更新するというアイデアに戻ることはまだ可能です。または別の回避策。どんな助けでも大歓迎です。

編集:

通知の使用は、resultreceiver および ibinder インターフェースを必要としないこのアプリを実装する方法です。

API レベル 16 で setlatesteventinfo が見つかりません。v4 サポート ライブラリを使用しようとしています。私の実装では、ループの反復ごとに新しい通知を作成します。しかし、最初だけ警告音を鳴らし続け、残りは鳴らさない方法がわかりませんでした。通知を適切に更新することに成功した人はいますか?

4

2 に答える 2

6

A を停止せずに実行中のサービス S にバインドできるかどうかを知りたい

それは確かに可能です。Hoan が指摘したように、アクティビティから bindService() を呼び出す必要があります。この記事には、それを行う方法に関するサンプルコードがいくつかあります。

あなたの質問の残りの部分については、いくつかの新しい質問に分解できるようです。一度にすべてを理解して答えるのは本当に難しいです。

于 2013-02-20T17:20:17.230 に答える