android - システムサービスからの受信を意図したレシーバで「エクスポートされたレシーバは許可を必要としません。
質問
AndroidManifestで、いくつかのReceiverを宣言しています。
<!-- no warning -->
<receiver
android:name=".receivers.TriggerMonitoringBootReceiver"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<!-- no warning -->
<receiver
android:name=".receivers.ScanResultsReceiver"
android:enabled="false">
<intent-filter>
<action android:name="android.net.wifi.SCAN_RESULTS" />
</intent-filter>
</receiver>
<!-- warning : Exported receiver does not require permission-->
<receiver
android:name=".receivers.BatteryMonitoringReceiver"
android:enabled="false">
<intent-filter>
<action android:name="@string/intent_action_setup_alarm" />
<action android:name="@string/intent_action_cancel_alarm" />
<action android:name="@string/intent_action_monitor" />
</intent-filter>
</receiver>
を受信するためのものです。
BOOT_COMPLETED
アクションを受け取ります。二つ目は
android.net.wifi.SCAN_RESULTS
. 3つ目は、私がブロードキャストしたいくつかのアクション (intent_action_monitor) を受け取るためのものであり、また
AlarmManager
(intent_action_setup_alarm など) を受信します。
2つの質問です。
- なぜすべての受信機で警告が表示されないのですか?
-
どのようなパーミッションを設定する必要がありますか?
を設定すれば、警告を修正できます。
(私はそれが何であるかを理解し、とにかく誰にも私のレシーバを使用して欲しくありません) ?
ウィル
exported="false"
する ブートレシーバー、Wifiレシーバー、アラームレシーバーなどのための ?
でカスタムパーミッションを使おうと思ったのですがandroid:protectionLevel="signatureOrSystem"
を使うことも考えましたが、ドキュメントによると、この 保護レベル と カスタムパーミッション . この警告をどのように処理すればよいのでしょうか?
ドキュメントやコードへのリンクは非常にありがたいものです。
どのように解決するのですか?
すべての受信機で警告が表示されないのですが?
最初の2つは、明らかにAndroidからブロードキャストされるように設計されているからです。最後の1つは、文字列リソースの値を供給していないため、また、おそらく独自のアクション文字列であるため、不明です。
警告を修正するために、システム サービスから受信することを意味するレシーバーにどのような権限を設定する必要がありますか。
正しい解決策は
<intent-filter>
. もし、これらの
Intents
をブロードキャストしている場合、あるいは
Intent
を
getBroadcast()
PendingIntent
を使えば、アクション文字列は必要ありません。アクション文字列は
Intent
のコンストラクタで、2番目のパラメータとしてJavaクラスオブジェクトを受け取り、それを使用します。
new Intent(this, BatteryMonitoringReceiver.class)
アクション文字列をこの
Intent
を捨て去ることができます。
<intent-filter>
を捨てることができます (ルーティングは供給されたコンポーネント、この場合はJavaクラスに基づいて行われます)。
のみを使用します。
<intent-filter>
を使うのは、OS やサードパーティアプリが
Intent
を実行する)。
PendingIntent
の実行はカウントされません)。
関連
-
[解決済み] Androidアプリケーションからインターネットにアクセスするには、どのような権限が必要ですか?
-
[解決済み] AndroidにおけるViewPager2の適切な実装
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] 非ActivityクラスでContextを取得する [重複].
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] アンドロイドでシェイクを検出するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] ViewPagerのアイテムを強制的に再インスタンス化する方法 [重複].
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] edittextのテキストがメールアドレスかどうかを確認するには?
-
[解決済み] アダプタからActivityメソッドを呼び出す
-
[解決済み] Travis.yml ./gradlew : パーミッションが拒否されました。
-
[解決済み] WhatsAppでメッセージを送信する