Android AppWidget 開發中PendingIntent傳送資料丟失解決辦法

來源:互聯網
上載者:User

AppWidget要向外部發送資料,可以把資料放在Intent裡,再用intent對象產生一個PendingIntent對象,然後用RemoteViews的setOnClickPendingIntent綁定到相應控制項上,具體代碼如下:

12345678910
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget);ComponentName thisWidget = new ComponentName(context,Widget.class);AppWidgetManager manager = AppWidgetManager.getInstance(context);Intent intent=new Intent(context,Main.class);Bundle extras=new Bundle();extras.putInt("appWidgetId",  appWidgetIds[0]);intent.putExtras(extras);PendingIntent pendingIntent=PendingIntent.getActivity(context,0, intent,PendingIntent.0);updateViews.setOnClickPendingIntent(R.id.abs,pendingIntent);manager.updateAppWidget(thisWidget, updateViews);

網上的例子代碼基本上是這樣的,但是如果在啟動的Activity接收Intent過來的資料,你會發現得到的Bundle其實是空的,也就是說,根本沒有資料傳過來。
這裡我們需要改一下第8行代碼,getActivity方法的最後一個參數是int flag,根據官方開發指南,這個值可以是FLAG_ONE_SHOT, FLAG_NO_CREATE, FLAG_CANCEL_CURRENT, FLAG_UPDATE_CURRENT
簡單翻譯一下:
int FLAG_CANCEL_CURRENT:如果該PendingIntent已經存在,則在產生新的之前取消當前的。
int FLAG_NO_CREATE:如果該PendingIntent不存在,直接返回null而不是建立一個PendingIntent.
int FLAG_ONE_SHOT:該PendingIntent只能用一次,在send()方法執行後,自動取消。
int FLAG_UPDATE_CURRENT:如果該PendingIntent已經存在,則用新傳入的Intent更新當前的資料。
我們需要把最後一個參數改為PendingIntent.FLAG_UPDATE_CURRENT,這樣在啟動的Activity裡就可以用接收Intent傳送資料的方法正常接收。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.