<receiver> class 没有注册从同一应用程序发送的隐式意图?
<receiver> class not registering implicit intent sent from same app?
我有一个 Android 应用程序,其主屏幕小部件带有按钮。设置小部件时,我使用代码:
Intent intentPlayPause = new Intent(context.getString(R.string.WidgetPlayPauseKey));
PendingIntent pendingIntentPlayPause = PendingIntent.getBroadcast(context, i, intentPlayPause, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main_widget);
views.setOnClickPendingIntent(R.id.widgetPlayPauseButton, pendingIntentPlayPause);
我有一个专门的 class 来接收小部件广播和做一些其他基本的事情。永远不会调用 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());
}
}
并且在该接收器的清单中 class:
<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 方法。如果我将按钮更改为使用显式意图而不是隐式意图,它可以正常工作,但我想知道为什么它不适用于隐式意图。我在我的应用程序的另一部分遇到了同样的问题,所以我真的很想知道为什么接收者没有注册隐式意图。另外,我尝试在清单中的接收器和小部件 classes 上将 "exported" 更改为 true 但这没有帮助。
感谢您的帮助。 :)
您必须使用简单的字符串,而不是清单文件中资源中的字符串。我的意思是您的广播接收器试图捕捉即“@string/blabla”而不是您的想法。
改为'my.custom.receiver.the.best.of.all':
<action android:name="my.custom.receiver.the.best.of.all" />
我有一个 Android 应用程序,其主屏幕小部件带有按钮。设置小部件时,我使用代码:
Intent intentPlayPause = new Intent(context.getString(R.string.WidgetPlayPauseKey));
PendingIntent pendingIntentPlayPause = PendingIntent.getBroadcast(context, i, intentPlayPause, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main_widget);
views.setOnClickPendingIntent(R.id.widgetPlayPauseButton, pendingIntentPlayPause);
我有一个专门的 class 来接收小部件广播和做一些其他基本的事情。永远不会调用 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());
}
}
并且在该接收器的清单中 class:
<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 方法。如果我将按钮更改为使用显式意图而不是隐式意图,它可以正常工作,但我想知道为什么它不适用于隐式意图。我在我的应用程序的另一部分遇到了同样的问题,所以我真的很想知道为什么接收者没有注册隐式意图。另外,我尝试在清单中的接收器和小部件 classes 上将 "exported" 更改为 true 但这没有帮助。
感谢您的帮助。 :)
您必须使用简单的字符串,而不是清单文件中资源中的字符串。我的意思是您的广播接收器试图捕捉即“@string/blabla”而不是您的想法。
改为'my.custom.receiver.the.best.of.all':
<action android:name="my.custom.receiver.the.best.of.all" />