私はボタンを持つホームスクリーンウィジェットを持つAndroidアプリを持っています。ウィジェットを設定するとき、私はコードを使用します:<receiver>同じアプリから送信された暗黙インテントがクラスに登録されていませんか?
私はウィジェットのブロードキャストを受信し、いくつかの他の基本的なことを行う専用のクラスを持っています。 onReceiveメソッドは決して呼び出されません。
public class WidgetBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("Sleep Timer", "Receiver Bcast in widget receiver: " + intent.getAction());
}
}
そして、この受信機クラスのマニフェストで:ここにいるからいくつかのコードです
<receiver
android:name=".WidgetBroadcastReceiver"
android:exported="false"
android:enabled="true">
<intent-filter>
<action android:name="@string/WidgetStopKey" />
<action android:name="@string/WidgetPlayPauseKey" />
</intent-filter>
</receiver>
は、しかし、onReceive方法は、単純に呼び出されることはありません。私が暗黙のインテントの代わりに明示的なインテントを使用するようにボタンを変更すると、正常に動作しますが、暗黙のインテントで動作しない理由を知りたいと思います。私はアプリの別の部分で同じ問題を抱えているので、なぜ受信者が暗黙的なインテントを登録していないのかを知りたいのです。また、マニフェストのレシーバクラスとウィジェットクラスの両方で "exported"をtrueに変更しようとしましたが、それは役に立ちません。
ありがとうございました。 :)
あなた 'targetSdkVersion'は何ですか? – ianhanniballake
minSdkVersion 18 targetSdkVersion 26 – Shredder2794
「暗黙のインテントの代わりに明示的なインテントを使用するようにボタンを変更すると、正常に動作します」 - セキュリティの欠陥が修正されます(現在、どのアプリでもブロードキャストを送信できます)。あなたの受信機に)、それはAndroid 8.0以降で動作します(暗黙のブロードキャストでは動作しません)。 Vyacheslavが示唆しているように、「」要素で 'android:name'の文字列リソースを使用しないようにしてください。 –
CommonsWare