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. 保留一个计数器MainActivity以指示您当前正在调用哪个应用程序。
  2. 使用startActivityForResult()而不是startActivity()启动您的应用程序。这将导致执行返回到 MainActivity.onActivityResult()每个应用程序完成时。
  3. 将返回到 requestCode,因此您将知道完成了哪个应用程序。因此,可以递增计数器并启动下一个应用程序。startActivityForResult()onActivityResult()MainActivityonActivityResult()

限制

  • MainActivity您的要求之一是在每个应用程序完成后返回。这些步骤满足了这一要求。
  • 另一个要求是在所有应用程序完成后返回`MainActivity。这些步骤也满足了这一要求。由于计数器的值,您将知道何时完成最终应用程序。
  • 最后的要求是将每个应用程序的持续时间限制为 30 秒。这是一个比较困难的问题。您将使用Timer您的MainActivity作为看门狗来监控生成的应用程序。使用此处描述的方法在时间用完时停止生成的应用程序: 完成另一个活动的活动
    警告:在尝试从外部停止应用程序之前,先让其他一切正常工作

就这样。祝你好运!

于 2013-04-01T17:26:30.957 回答