让Android应用程序启动和停止第三方应用程序

让Android应用程序启动和停止第三方应用程序,android,kill-process,Android,Kill Process,我有一个Android应用程序,它使用一个活动启动另一个应用程序(第三方应用程序)。某些事件发生后,我希望活动停止/隐藏/杀死第三方应用程序 启动第三方应用程序很容易,但我找不到阻止它的方法 我在网上读了很多关于如何做到这一点的文章,但似乎无法得到我想要的结果。在这一点上,没有根设备几乎是不可能的 如果有人能提出更好的方法,我们将不胜感激 我知道,如果第三方应用程序的uid不同,那么对内核的杀死第三方应用程序的调用将被忽略,但鉴于我已经启动了该应用程序,我认为一定有办法阻止它 我已经包括了一些我

我有一个Android应用程序,它使用一个活动启动另一个应用程序(第三方应用程序)。某些事件发生后,我希望活动停止/隐藏/杀死第三方应用程序

启动第三方应用程序很容易,但我找不到阻止它的方法

我在网上读了很多关于如何做到这一点的文章,但似乎无法得到我想要的结果。在这一点上,没有根设备几乎是不可能的

如果有人能提出更好的方法,我们将不胜感激

我知道,如果第三方应用程序的uid不同,那么对内核的杀死第三方应用程序的调用将被忽略,但鉴于我已经启动了该应用程序,我认为一定有办法阻止它

我已经包括了一些我使用过/尝试过的代码-带有注释。第三方应用程序名为com.XXX

            //start activity
        String packageName = "com.XXX";
        Intent startIntent = this.getPackageManager().getLaunchIntentForPackage(packageName);
            startActivity(startIntent);

        //attempts to stop app
        List<ActivityManager.RunningAppProcessInfo> activityes = ((ActivityManager)am).getRunningAppProcesses();
        for (int iCnt = 0; iCnt < activityes.size(); iCnt++) {
            if (activityes.get(iCnt).processName.contains(packageName)) {
                for (int i = 0; i < 10; i++) {
                    try {

                        //method A - call processed but had no effect 
                        android.os.Process.killProcess(activityes.get(iCnt).pid);
                        am.killBackgroundProcesses(packageName);

                        // method B- same result as A above
                        android.os.Process.sendSignal(activityes.get(iCnt).pid, android.os.Process.SIGNAL_KILL);
                        am.restartPackage(packageName);

                        //method C - no effect
                        String[] command = {"kill", "-9", ""+activityes.get(iCnt).pid};
                        ProcessBuilder processBuilder = new ProcessBuilder(command);
                        Process process = processBuilder.start();
                        process.waitFor();

                        //method D - generates exception as no su rights
                        Process process2 = Runtime.getRuntime().exec(new String[] { "su", "-c", "kill -9 " + packageName + "\n"});
                        Process process2 = Runtime.getRuntime().exec(new String[] { "adb", "root", "kill -9 " + packageName + "\n"});

                        //method E - generates exception as no su rights
                        Process suProcess1 = Runtime.getRuntime().exec("adb shell echo \"kill -9 \" + packageName + "\" | su");
                        suProcess1.waitFor();
                        Process suProcess2 = Runtime.getRuntime().exec("/system/bin/su -c kill -9 " + packageName);
                        suProcess2.waitFor();


                        //method F - generates exception as no su rights
                        Process suProcess3 = Runtime.getRuntime().exec("su");
                        DataOutputStream os = new DataOutputStream(suProcess3.getOutputStream());
                        os.writeBytes("adb shell" + "\n");
                        os.writeBytes("am force-stop " + packageName + "\n");
                        os.writeBytes("kill -9 " + packageName + "\n");
                        os.flush();
                        os.close();


                    } catch (Exception e) {
                        Log.d("DEBUG", i + "B/" + e.getLocalizedMessage());
                    }
                }
            }
        }
//启动活动
字符串packageName=“com.XXX”;
Intent startinent=this.getPackageManager().getLaunchIntentForPackage(packageName);
startActivity(startinent);
//尝试停止应用程序
列出活动=((ActivityManager)am).GetRunningAppProcess();
对于(int-iCnt=0;iCnt
Android并不是专门为第三方应用程序(你)设计的,它可以杀死另一个第三方应用程序(com.XXX)。Android通常不能很好地处理“任务杀手”应用程序,因为由于各种原因,操作系统通常会重新启动这些进程。如果你能提供一个更好的想法,你打算做什么,这会有所帮助。要求另一个应用程序处理某些操作(如选择联系人)并不少见,但这通常是通过
startActivityForResult()
完成的。你到底想做什么?我有几件事想做,但我想其中一些主要目的是启用音乐播放器,然后在一段时间后关闭它,比如睡眠计时器,但我想启动和停止第三方应用程序,而不是使用内部音乐/媒体播放器。还可以启用手电筒应用程序,但同样,不是通过编程方式打开led,而是通过启用第三方应用程序。我是否能够通过使用java反射调用模拟应用程序“强制停止”来终止该应用程序?(如果是,调用名称/参数是什么?)