2010-08-11 49 views
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

會發生什麼情況?

編輯:本BroadcastReceiverAndroidManifest.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, 因爲你的時間從 該方法(在這一點你可以 第一次收到來自您的 寄存器的任何東西),該組件不再 活着,並且系統可以返回隨時致電 回收記憶。

+0

它肯定看起來不錯。這個'BroadcastReceiver'聲明在哪裏 - 清單還是'registerReceiver()'?如果後者,你確定它實際上是在應用程序窗口小部件點擊時註冊的嗎? – CommonsWare 2010-08-11 22:37:57

+0

它在清單中聲明,但我已經嘗試了兩種方法。我會重複我的測試,以防萬一我錯過了一些東西。我也發現了一個關閉相關的問題,在同樣的問題(http://stackoverflow.com/questions/3044275/send-a-public-broadcast-from-an-appwidget-in-android) – 2010-08-12 06:25:14

回答

0

考慮一下:

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