1

我有一個能夠啓動該應用程序的主應用程序和主屏幕小部件。 Widget將一些額外內容傳遞給Intent以將初始數據傳遞給應用程序。向主頁按鈕暫停的應用程序添加附加內容

Bundle extras = new Bundle(); 
extras.putString(AppWidgetConfigureActivity.EXTRA_ITEM, modeName);    

Intent modeIntent = context.getPackageManager().getLaunchIntentForPackage("com.my.app"); 

modeIntent.putExtras(extras); 
modeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);     
context.startActivity(modeIntent); 

在該應用的onCreate方法我得到這樣的演員:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
super.onCreate(savedInstanceState); 
Intent intent = this.getIntent(); 
String mode = intent.getStringExtra(EXTRA_ITEM); 
... 
} 

一切是怎麼回事很好,如果應用程序沒有啓動或按後退按鈕停止。 但是,如果應用程序已被主頁按鈕暫停,它會從我的窗口小部件重新啓動並使用舊的額外功能,它從onResume方法開始,而不是從onCreate開始(這是顯而易見的事實),並且此時活動的Intent具有舊的額外功能,我把小部件放在了Intent中。

如何將附件從小部件傳遞給已由主頁按鈕暫停的應用程序?

+0

如果您想在onCreate中傳遞另一個時間,則必須銷燬該活動。 onResume不允許意圖捕獲,因爲是恢復剛剛創建並剛剛使用意向的東西的回調。 如果您想重新加載活動,則可以嘗試在返回時嘗試使用'this.finish' –

+0

不,我不想銷燬活動或以某種方式干擾標準應用程序工作流程。我想留在常見的Android的工作流程和接口。 – Grinchman

回答

0

我不太清楚你想要什麼在這裏,但讓我來試試.. 可以使用getIntent()來獲得onResume()Intent,但我不知道你是否仍然可以抓取演員在那裏。
但是,如果您必須重新創建某些內容,則只需保存您在onCreate()方法中獲得的額外內容,並在onResume()中設置應用的內容即可。
也看看onSaveInstanceState()onRestoreInstanceState()

String mode; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Intent intent = this.getIntent(); 
    mode = intent.getStringExtra(EXTRA_ITEM); 
    ... 
} 

@Override 
public void onResume() { 
    setMode(mode); 
} 
+0

讓我更直接地解釋我的目標: 小部件首次運行應用程序時帶有一些額外功能。應用程序已啓動並調用onCreate方法。在這一點上,我從意向中獲得了我期望的確切附加值。 然後我按下主頁按鈕,應用程序暫停(但不會被銷燬)。接下來,我使用小部件重新啓動該應用程序,並添加一些新的附加功能應用程序運行和onResume方法被調用。此時我嘗試從Intent獲得新的附加組件,但是我從第一次獲得了部件中的第一次放入Intent的舊附加組件。 – Grinchman

+0

這是正確的,您創建的應用程序活動首先不會被破壞。而不是按回家按鈕,開始睡覺或再次開始活動。 –

+0

試圖更精確:這是正確的,您創建的應用程序活動首先不會被破壞。 (不是通過home按鈕,devie睡眠或再次開始活動) ...如果您使用'startActivity()'從小部件再次啓動它,則會獲得此活動的第二個實例,並且第一個實例不會被銷燬並且仍然會在堆棧中...所以你也許應該在重新開始之前殺掉舊的 - 也許有一個像'clean_top'或'reorder_to_frot'或其他方式的標誌 –

0

我找到了解決方案! 你只需要向Intent添加一個標誌。

modeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

這個標誌(FLAG_ACTIVITY_CLEAR_TOP)清除當前任務堆棧,並在回調的onResume明顯的新意向的羣衆演員。

+0

我也面臨同樣的問題,但在我的情況下,應用程序暫停與主頁按鈕,我打電話給應用程序再次從小部件配置活動,但上述解決方案不適合我 – ramya

相關問題