繁体   English   中英

Android:单击窗口小部件中的按钮时,接收自定义广播

[英]Android : Receive custom broadcast when a button in a widget is clicked

我有一个可以正常工作的BroadcastReceiver ,即从一个Activity执行此代码,接收器接收到该意图:

Intent toggleIntent = new Intent(this, ToggleServicesReceiver.class);
this.sendBroadcast(toggleIntent);

但我试图通过小部件中的按钮执行相同的操作:

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {  
    ...
    Intent toggleIntent = new Intent(context, ToggleServicesReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, toggleIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteView.setOnClickPendingIntent(R.id.widget_button, pendingIntent);
}

该代码被调用(我已经在调试器中进行了检查),但是当用户单击按钮时,相同的BroadcastReceiver不会收到Intent

可能会发生什么?

编辑BroadcastReceiver是在AndroidManifest.xml定义的,现在我不确定是否需要<intent-filter>

<receiver android:name="foo.receivers.ToggleServicesReceiver">
    <intent-filter>
        <action android:name="foo.intent.action.SERVICES_TOGGLE" />
    </intent-filter>
</receiver>

编辑 :我也在论坛中找到此,它可能与此问题有关

您根本无法做到这一点。 BroadcastReceiver组件仅在对onReceiveIntent()的调用期间保持有效。 不允许在其中使用registerReceiver,因为当您从该方法返回时(此时您首先可以从寄存器中接收任何内容),该组件不再活动,并且系统可以随时终止回收记忆。

考虑一下:

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, toggleIntent, PendingIntent.FLAG_ONE_SHOT);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM