1
我有一個BroadcastReceiver
工作正常,即從一個活動執行此代碼接收自定義播放,接收器接收的意圖:安卓:當一個小部件的按鈕被點擊
Intent toggleIntent = new Intent(this, ToggleServicesReceiver.class);
this.sendBroadcast(toggleIntent);
但我想從做一個按鈕,同在一個Widget:
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>
編輯:我還發現這一個論壇,它可能與此問題有關
你根本無法做到這一點。 A BroadcastReceiver組件只有 在呼叫期間「生命」 to onceceiveIntent();它不是 允許它使用registerReceiver, 因爲你的時間從 該方法(在這一點你可以 第一次收到來自您的 寄存器的任何東西),該組件不再 活着,並且系統可以返回隨時致電 回收記憶。
它肯定看起來不錯。這個'BroadcastReceiver'聲明在哪裏 - 清單還是'registerReceiver()'?如果後者,你確定它實際上是在應用程序窗口小部件點擊時註冊的嗎? – CommonsWare 2010-08-11 22:37:57
它在清單中聲明,但我已經嘗試了兩種方法。我會重複我的測試,以防萬一我錯過了一些東西。我也發現了一個關閉相關的問題,在同樣的問題(http://stackoverflow.com/questions/3044275/send-a-public-broadcast-from-an-appwidget-in-android) – 2010-08-12 06:25:14