让Android应用程序启动和停止第三方应用程序
我有一个Android应用程序,它使用一个活动启动另一个应用程序(第三方应用程序)。某些事件发生后,我希望活动停止/隐藏/杀死第三方应用程序 启动第三方应用程序很容易,但我找不到阻止它的方法 我在网上读了很多关于如何做到这一点的文章,但似乎无法得到我想要的结果。在这一点上,没有根设备几乎是不可能的 如果有人能提出更好的方法,我们将不胜感激 我知道,如果第三方应用程序的uid不同,那么对内核的杀死第三方应用程序的调用将被忽略,但鉴于我已经启动了该应用程序,我认为一定有办法阻止它 我已经包括了一些我使用过/尝试过的代码-带有注释。第三方应用程序名为com.XXX让Android应用程序启动和停止第三方应用程序,android,kill-process,Android,Kill Process,我有一个Android应用程序,它使用一个活动启动另一个应用程序(第三方应用程序)。某些事件发生后,我希望活动停止/隐藏/杀死第三方应用程序 启动第三方应用程序很容易,但我找不到阻止它的方法 我在网上读了很多关于如何做到这一点的文章,但似乎无法得到我想要的结果。在这一点上,没有根设备几乎是不可能的 如果有人能提出更好的方法,我们将不胜感激 我知道,如果第三方应用程序的uid不同,那么对内核的杀死第三方应用程序的调用将被忽略,但鉴于我已经启动了该应用程序,我认为一定有办法阻止它 我已经包括了一些我
//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反射调用模拟应用程序“强制停止”来终止该应用程序?(如果是,调用名称/参数是什么?)