2013-04-01 31 views
0

我正在寫我的第一個android應用程序,所以我會盡我所能來清晰和準確。我可以看到一些類似的問題,但沒有一個似乎回答它完全如此也許它不能完成,但在這裏:你如何獲得一個Android應用程序來啓動多個應用程序,然後返回到最初的應用程序?

我有我的主要活動,其數據存儲,其中包括一個列表用戶選擇啓動的設備上的應用程序。點擊主活動屏幕上的一個按鈕後,我希望設備依次啓動這些選定的應用程序,然後(理想情況下)將用戶返回到我編寫的主要活動。我還想定義運行每個應用程序的一些限制 - 例如,每個應用程序運行30秒,或者直到應用程序停止使用互聯網(以最早的時間爲準)。

我不認爲我有任何問題將所有這些鏈接到按鈕點擊,也沒有任何問題循環通過所有選定的應用程序。我真正需要的是啓動每個應用的代碼,然後從中回想起/轉移到下一個應用(理想情況下在30秒後或應用停止使用互聯網時)。希望下面的代碼能夠明確我在哪裏尋找TODO的幫助。有誰知道這是否可能,以及如果我能如何完成它?

public class MainActivity extends Activity { 
... //some code up here 

//when the Run Apps button is clicked the onClick will run all of the selected apps using this Method: 
public void RunApps(View view) { 

    //run through the list of Apps and run the ones that are selected 
    for (App application : list) { 
     if (application.isSelected()) { 

       /* TODO code that is meant to run the selected app and return to the main 
       * activity after say 30 seconds or when the app is done using the internet. 
       * As a starter I have the below but this is crashing and even if it did run 
       * I believe that it would not return me to the original main activity: 
       */ 
       Intent i = new Intent(Intent.ACTION_MAIN); 
       PackageManager manager = getPackageManager(); 
       i = manager.getLaunchIntentForPackage(application.getPackageName()); 
       i.addCategory(Intent.CATEGORY_LAUNCHER); 
       startActivity(i); 
     } 
    } 
}; 

...//some more code here 
} 

只是幾個音符 - App類在別處定義,並且包括包名和是否該應用已經由用戶選擇。列表是一個應用程序列表。

我相信ACTION_MAIN和CATEGORY_LAUNCHER值可能不是最好用的,也許startActivity(i)不是我想要的正確方法,但我不確定需要如何更改或者是否有更基礎的方法需要更改。

非常感謝您的幫助。

回答

0

您應該按順序逐個調用頂級MainActivity來運行每個應用程序。

下面是如何

  1. 保留一個計數器在MainActivity指示哪些應用程式,你是 當前調用。
  2. 使用startActivityForResult()而不是startActivity()開始 您的應用程序。當每個應用程序完成時,這將導致執行返回到 MainActivity.onActivityResult()
  3. requestCode將返回到 onActivityResult(),因此您將知道哪個應用程序已完成。 因此,MainActivity可以遞增計數器並啓動onActivityResult()中的下一個應用程序 。

限制

  • 你的一個要求是每個 應用程序完成後,返回到MainActivity。這些步驟滿足這一要求。
  • 另一個要求是在完成所有 應用程序後返回到MainActivity。這些步驟也滿足這一要求。 由於計數器的價值,您將知道何時完成了最終的應用程序 。
  • 最後的要求是將每個應用程序的持續時間限制在30秒內。這是一個更難的問題。您將使用您的MainActivity中的Timer 作爲監視器來監視衍生的應用程序。使用下面介紹的方法 可在時間用完時停止衍生的應用程序: Finish an activity from another activity
    警告:在嘗試從外部停止應用程序之前,讓其他所有工作都先完成。

就是這樣。祝你好運!

+0

謝謝你。我試圖實施大衛的建議,但它不是很有效。例如如果用戶選擇了一些應用程序來啓動(比如說瀏覽器就是其中之一併且是列表中的第一個),那麼當你啓動RunApps方法時,瀏覽器會打開並開始從網絡加載(這正是我想要的)。但是,它永遠不會返回到原始應用程序。我必須通過UI手動返回到原始應用程序。然後它會從所選列表中啓動另一個應用程序,但它又不會返回到我的應用程序。有任何想法嗎?我可以自動從瀏覽器和其他第三方應用程序返回嗎? – Soxford

+0

我相信,一旦用戶按下「返回」,瀏覽器將返回到您的活動。我相信你可以保持瀏覽器退出後退堆棧,這樣當用戶最終退出你的活動時,它不會保留:'intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);'。最後,包括我自己在內的開發人員可以用一個大的「WebView」創建一個自定義活動,並用它來導航到網站,而不是原生的Android瀏覽器應用程序。也許你應該在用戶選擇導航到一個URL時使用這種機制。 –

相關問題