0

我有一個關於AppWidget意圖處理的問題。我有一個可點擊的小部件,點擊後,我想向AppWidgetProvider本身發送一個意圖以進行進一步處理。在AppWidgets中處理(等待)意圖的正確方式

問題:我最初在onReceive()中接收意圖,但過了一會兒(不知道是什麼原因導致它),onReceive()不再被調用。

我有下面的代碼,所有在MyWidgetProvider中擴展AppWidgetProvider。

一)註冊接收廣播:

in onEnabled(...): 
    context.getApplicationContext().registerReceiver(this, new IntentFilter(MY_ACTION)); 

二)設置的意圖上點擊被解僱:

in onUpdate(...) 
    Intent intent= new Intent(MY_ACTION); 
    PendingIntent pendingIntent= PendingIntent.getBroadcast(context, 0/*notusedanyway*/, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    views.setOnClickPendingIntent(R.id.widget_root, pendingIntent); 

C)反應事件,並做一些事情:

in onReceive(...) 
    if (MY_ACTION.equals(intent.getAction()) 
    doSomething(); 

當我部署+添加小部件時,它工作正常。然而,過了一段時間 - 不確定究竟是什麼原因導致了問題,但是打個電話似乎影響了它 - 我不再在onReceive()中得到任何通知。

我完全難住爲何如此。有人能告訴我這樣做的正確方法嗎?

謝謝!

湯姆

回答

1

你應該用你的AndroidManifest.xml文件中註冊的廣播接收器。當您在onEnable中註冊時,它將與進程綁定。每當Android殺死你的進程時(例如,當收到電話時),那麼你的接收器不再存在,並且(如你所觀察到的)不再有效。

+0

謝謝,解決了它。我做了一些日誌記錄,並且我的提供程序實際上已經在啓動時實例化了三次,但onEnabled只被調用一次。這是「不依賴任何實例註冊代碼......」方向的一個重要提示;) – Tom