スティッキーブロードキャストとは


89

私はAndroidのドキュメントでこの用語に付随する定義を見つけました

これらは、終了後にシステムによってデータが保持されるブロードキャストであるため、クライアントは次のブロードキャストを待たずにそのデータをすばやく取得できます。

どういう意味ですか?誰かが特定の例でその使用を詳しく説明できますか?このインテントを使用するには許可をリクエストする必要があると思いますか?なんでそうなの?

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> - Allows an application to broadcast sticky intents.

3
2019年 Sticky broadcasts should not be used. They provide no security (anyone can access them), no protection (anyone can modify them), and many other problems. The recommended pattern is to use a non-sticky broadcast to report that something has changed, with another mechanism for apps to retrieve the current value whenever desired.
fangzhzh

回答:


110

アクティビティがonPause通常のブロードキャストで呼び出すと、ブロードキャストを受信できなくなる可能性があります。スティッキブロードキャストは、で開始された後に確認できますonResume

2020年6月23日更新

スティッキーブロードキャストは非推奨です。

sendStickyBroadcastドキュメントを参照してください

このメソッドは、APIレベル21で廃止されました。

スティッキーブロードキャストは使用しないでください。それらはセキュリティ(誰でもアクセスできる)、保護(誰でも変更できる)、および他の多くの問題を提供しません。推奨されるパターンは、非スティッキーブロードキャストを使用して何かが変更されたことを報告することです。また、アプリが必要に応じて現在の値を取得する別のメカニズムを備えています。

実装する

Intent intent = new Intent("some.custom.action");
intent.putExtra("some_boolean", true);
sendStickyBroadcast(intent);

資源


こんにちは、私は静的にブロードキャストを登録するスティッキーブロードキャストと混同しています。ブロードキャストをマニフェストファイルに登録することとプログラムで登録することの違いは、どこかでブロードキャストを登録解除せずにそこに留まることだけですが、後者はonPause()メソッドでブロードキャストを登録解除します。
Shaista Naaz

注:ほとんどの場合、スティッキーブロードキャストは避けてください。詳細については、@ Nikhil_Katreからの回答のリンクを参照しください
gMale

@Shaista:アプリが休止している場合でもマニフェストレシーバーは動作しますが、プログラマティックレシーバーは、アプリが登録されているアプリケーションの実行中にのみ応答します
gMale

私たちが活動していると我々はonPause()内にあり、場合@gmaleそこで、我々は)我々は(onResumeで再開放送を取得します。.. unregisterReceiver()と呼ばれている
Kushal

1
@PaulBurke 上記のリンクから、Mark Murphyという名前は見つかりませんでした。このリンクは、正確な答えではない質問に私をリダイレクトします。URLを更新していただけますか?
Vishal Chhodwani

11

sendStickyBroadcast()は、sendBroadcast(Intent)スティッキと呼ばれる機能を実行します。つまり、送信するインテントは、ブロードキャストの完了後もとどまるので、他の人はの戻り値を通じてそのデータをすばやく取得できますregisterReceiver(BroadcastReceiver, IntentFilter)。他のすべての点で、これはと同じように動作しsendBroadcast(Intent)ます。オペレーティングシステムを介して送信されるスティッキーブロードキャストの一例はACTION_BATTERY_CHANGEDです。registerReceiver()そのアクションを呼び出すと、nullがあってもBroadcastReceiver、そのアクションに対して最後にブロードキャストされたインテントが取得されます。したがって、これを使用して、バッテリーの将来のすべての状態変化に必ずしも登録することなく、バッテリーの状態を見つけることができます。


8

スティッキブロードキャストの値は、最後にブロードキャストされ、現在スティッキキャッシュに保持されている値です。これは今受信した放送の価値ではありません。それは、いつでもアクセスできるブラウザCookieのようなものだと言えると思います。スティッキーブロードキャストは、スティッキーブロードキャストメソッドのドキュメント(など)に従って非推奨になりました。

このメソッドはAPIレベル21で廃止されました。スティッキーブロードキャストは使用しないでください。それらはセキュリティ(誰でもアクセスできる)、保護(誰でも変更できる)、および他の多くの問題を提供しません。推奨されるパターンは、非スティッキーブロードキャストを使用して何かが変更されたことを報告することです。また、アプリが必要に応じて現在の値を取得する別のメカニズムを備えています。


3

通常のブロードキャストインテントは、システムによって送信および処理された後は使用できなくなります。sendStickyBroadcast(Intent)メソッドを使用する場合、インテントはスティッキーです。つまり、送信するインテントは、ブロードキャストの完了後も残ります。

あなたは私のブログを参照しています:ここにリンクの説明を入力してください


1
リンクしているブログの著者情報の開示を追加しました。今後自分で行う必要あります。そうしないと、投稿がスパムとして削除される可能性があります。
Andrew Barber、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.