Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Runtime.getRuntime().exec未在Android上启动所需的应用程序_Java_Android_Android Intent_Exec - Fatal编程技术网

Java Runtime.getRuntime().exec未在Android上启动所需的应用程序

Java Runtime.getRuntime().exec未在Android上启动所需的应用程序,java,android,android-intent,exec,Java,Android,Android Intent,Exec,我正在尝试从示例应用程序内部打开设置应用程序。 onCreate内的代码段: Process process; try { process = Runtime.getRuntime().exec("am start -a android.intent.action.MAIN -n com.android.settings/.Settings"); process.waitFor(); BufferedReader reader =

我正在尝试从示例应用程序内部打开设置应用程序。 onCreate内的代码段:

    Process process;
    try {
        process = Runtime.getRuntime().exec("am start -a android.intent.action.MAIN -n com.android.settings/.Settings");
        process.waitFor();
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String s = reader.readLine();
        Toast.makeText(this, s, Toast.LENGTH_LONG).show();
    }
     catch(Exception e) {
        e.printStackTrace();
    }
当我运行此程序时,我的应用程序会打开,但设置应用程序不会启动(我尝试的任何其他应用程序也不会启动)。为调试而插入的toast显示“Starting:Intent{act=android.Intent.action.MAIN cmp=com.android.settings/.settings},但它实际上并没有启动。在logcat中也看不到任何有用的内容(除非我遗漏了一些内容)

使用adb(adb shell am start-a android.intent.action.MAIN-n com.android.settings/.settings)执行相同的命令

如果有必要的话,我正在使用Android Studio和Android 4.4设备。我一直在网上搜索,以找出我可能做错了什么,但上面的代码似乎是正确的。有人能帮忙吗

更新:
抱歉没有提供更多细节,但设置并不是我最终计划在这个应用的实际版本中启动的应用程序,设置只是一个测试。它是另一个没有android:exported=“true”并接受参数的应用程序。准确地说,它会打开某个扩展名的文件,并将其作为参数,如adb shell am start-W-a android.intent.action.VIEW-d…”

在android中运行另一个应用程序的正确方法是


为什么不通过
意图打开设置呢

startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);

好吧,
am
命令必须由
adb shell
执行,并且由于Linux权限,不能由普通SDK进程执行。啊,如果是这样的话,那么我的方法就无法工作。我在这里读过:,这里:这里,am start应该可以工作,这是用于
uiautomator
,它本身通过
adb shel工作l
。该问题和答案不会讨论从Android应用程序调用
am start
。除此之外,请不要试图访问其他应用程序的非导出活动来攻击它们。感谢@commonware,我们会小心行事,不会采用这种方法。抱歉没有提供更多详细信息,但设置不是我最终计划的应用程序要在实际版本的应用程序中启动,设置只是一个测试。它是另一个没有android:export=“true”并接受参数的应用程序。准确地说,它会打开某个扩展名的文件作为参数。因为android:export=“true”“不存在,使用launchIntent将不起作用,对吗?您不能使用intent.putExtra添加参数吗?如果目标活动不打算由其他活动启动,为什么要由您的特定活动启动?谢谢@dvhh。”。你是对的,如果不是故意的,那么这可能是不对的。但其目的是仅在从我的应用程序触发时使用此特定应用程序打开特定文件,而不管用户是否选择此应用程序作为默认应用程序。也许这也不是正确的选择。
startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);