2012-06-29 57 views
12

這樣的代碼運行良好。如何從Android AppWidget啓動Activity?

Intent configIntent = new Intent (context, WidgetConfigActivity.class); 
    configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    PendingIntent pIntent = PendingIntent.getActivity(context, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    remoteView.setOnClickPendingIntent(R.id.btn, pIntent); 

但我想隱藏按鈕befor活動會出現,所以我triing在onReceive()方法來發送意圖的小部件本身,進行隱藏組件,然後再開始活動。問題是我不能在AppWidget中使用startActivity()函數。

有沒有解決方法?

回答

15

問題是我無法在AppWidget中使用startActivity()函數。

是的,你可以。您在Context對象中傳入onUpdate()(或onReceive()AppWidgetProvider - 請致電startActivity()

+2

沒有像好醇」 commonsware回答一個星期五的下午......告訴它喜歡它是 –

+0

哦,我的上帝,我知道這是計算器,但我必須要說的是:我花了整個週末的工作使周圍一個類讓我從一個活動的上下文小部件,只因爲我沒有注意到在onUpdate傳遞的上下文,哦,親愛的主 –

13

謝謝2 CommonsWare

還有一件事要做。 context.startActivity();在這種情況下拋出RuntimeException

從活動上下文外部調用startActivity()需要使用 FLAG_ACTIVITY_NEW_TASK標誌。這真的是你想要的嗎?

所以你需要前設置標誌

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

5
// on receive function use this for new activity start 
       Intent intent = new Intent (context, AppWdget.class); 
       intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity (intent); 
相關問題