0

私は最初の 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 クラスは別の場所で定義されており、パッケージ名と、アプリがユーザーによって選択されているかどうかが含まれています。list はアプリのリストです。

ACTION_MAIN および CATEGORY_LAUNCHER の値は使用するのに最適ではない可能性があり、おそらく startActivity(i) は私が望むものに適した方法ではありませんが、それをどのように変更する必要があるか、またはより根本的な変更が必要かどうかはわかりません。

助けてくれてありがとう。

4

1 に答える 1

0

MainActivity一度に 1 つずつ呼び出して、トップレベルから順番に各アプリを実行する必要があります。

方法は次のとおりです。

  1. MainActivity現在呼び出しているアプリを示すために、カウンターを保持します。
  2. アプリケーションを起動するstartActivityForResult()代わりに使用します。これにより、各アプリが終了したときにstartActivity()実行が戻り ます。MainActivity.onActivityResult()
  3. requestCodestartActivityForResult()に返される onActivityResult()ので、どの申請が完了したかがわかります。したがって、MainActivityでカウンタをインクリメントし、次のアプリケーションを開始できますonActivityResult()

制限:

  • MainActivity要件の 1 つは、各アプリの完了後に戻ることです。これらの手順は、その要件を満たしています。
  • もう 1 つの要件は、すべてのアプリが終了した後に MainActivity に戻ることです。これらの手順は、その要件も満たしています。カウンターの値により、最終アプリをいつ終了したかがわかります。
  • 最後の要件は、各アプリの継続時間を 30 秒に制限することです。これはより難しい問題です。で をウォッチドッグとして使用してTimerMainActivity生成されたアプリを監視します。ここで説明されている方法を使用して、時間がなくなったときに生成されたアプリを停止します: Finish an activity from another activity
    警告: 外部からアプリを停止しようとする前に、まず他のすべてを機能させてください

それで全部です。幸運を!

于 2013-04-01T17:26:30.957 に答える