2010-10-21 56 views
1

我目前有兩個獨立的應用程序,兩者都執行獨立的任務,但是在有限的時間裏,當我需要一個應用程序使用另一個應用程序時,如果有的話。活動生命週期 - startActivity()附加項目

所以我用一個函數來檢查所需的應用程序存在:

public static boolean isIntentAvailable(Context context, String action) 
{ 
    final PackageManager packageManager = context.getPackageManager(); 
    final Intent intent = new Intent(action); 
    List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
    return list.size() > 0; 
} 

如果是這樣,那麼我用下面用一個額外的啓動活動上有:

if (isIntentAvailable(ListPOI.this, "com.me.myapp.MY_MAP")) 
{ 
    Intent i = new Intent("com.me.myapp.MY_MAP"); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.putExtra("place", true); 
    startActivity(i); 
} 

的setFlags意味着如果用戶按回家,他們回到第一個應用程序,它打開,它不打開這裏調用的第二個應用程序。

這一切都工作正常,第一次。然而,第二次調用此應用程序後,第二個應用程序會繼續運行,因此它不會接收已通過的「額外」應用程序,如何確保獲得額外的應用程序?

+1

我可以想到兩件事,我不會將它作爲答案發布,因爲我不知道: 1)如何迫使活動完成onStop 2)獲取onResume而不是onCreate的意圖? – blindstuff 2010-10-21 20:49:41

+0

這工作 - 從來沒有在onResume() – Scoobler 2010-10-21 22:17:29

回答

8

最後回答我的問題已經使用下列內容:

我創建了一個函數來處理加載意圖演員:

private void handleIntent(Intent intent) 
{ 
    Bundle extras = intent.getExtras(); 
    if (extras != null) 
    { 
     place = extras.getString("place"); 
    } 
} 

在的onCreate我用:

handleIntent(getIntent()); 

然後添加以下函數以獲取活動的現有實例通過新的意圖時的意圖:

public void onNewIntent(Intent intent) 
{ 
    setIntent(intent); 
    handleIntent(intent); 
} 

我還使用上面的代碼將android:launchMode="singleInstance"添加到活動清單中的活動聲明中。

最後從第一個包中,我現在可以使用下面的代碼來啓動另一個包。當第二個軟件包啓動時,用戶可以點擊第一個軟件包(從主頁啓動器)並獲得他們期望的應用程序,如果他們點擊啓動第二個軟件包,則會顯示「正在運行」的實例,但捕獲新的額外的已經過去了:

Intent i = new Intent("com.me.myapp.MY_MAP"); 
i.putExtra("place", place); 
startActivity(i); 

希望這將是有益的人 - 它可能沒有做到這一點的最好辦法,但它爲我工作。

1

這不是flag_activity_new_task的意思。這些標誌只對在您的流程中開始的活動有意義。啓動另一個應用程序的活動將始終將其作爲新任務啓動,並在新流程中使用新堆棧。

顯然我錯了。 Activities defined in different applications can share an affinity。我不知道。儘管如此,我仍然不清楚你想要發生什麼。

你是什麼意思「第二次打電話」。第二次是什麼?它恢復了什麼?你在期待什麼?

+0

拿起意圖額外的thoguht如果我刪除setFlags,我點擊按鈕來啓動新的「其他」應用程序其負載顯示我想要的。用戶回到家中,點擊第一個應用程序再次打開它,而不是第一個應用程序,顯示'其他'的應用程序 - 與標誌似乎並沒有發生。至於第二次調用:用戶點擊按鈕,其他應用程序加載顯示傳遞的額外結果。如果用戶返回到第一個應用程序並再次按下該按鈕,則恢復其他應用程序的原始版本,使用原來的額外按鈕而不是新按鈕按下的新按鈕。 – Scoobler 2010-10-21 21:13:01

+0

獲取onResume而不是onCreate的意圖。 – blindstuff 2010-10-21 21:22:31

+0

通過應用程序您的意思是活動?活動和應用程序不是一回事。 – Falmarri 2010-10-21 21:34:20