我一直在开发一个应用程序,需要在我的代码中关闭另一个应用程序。有人知道任何可以调用以关闭应用程序的API吗?
顺便说一下:我的应用程序将被预安装。
谢谢。
private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
am.restartPackage("com.jimmy.appToBeClosed");
ActivityManager am = (ActivityManager) getApplicationContext().getSystemService("activity");
Method forceStopPackage;
forceStopPackage =am.getClass().getDeclaredMethod("forceStopPackage",String.class);
forceStopPackage.setAccessible(true);
forceStopPackage.invoke(am, pkg);
在清单文件中添加这个
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission>
String.class
和pkg
? - ankalagbapkg
是什么意思... - ETLpkg
将是您想要关闭的应用程序 ID(包)的字符串。 - ETLforceStopPackage
方法在 Android 11 上已经不存在。 - ETL我已经成功地在Android 12上关闭了另一个应用程序。以下是方法:
基本上,我正在从服务中关闭另一个应用程序,尽管您也应该能够从应用程序中执行此操作。
我的服务是一个特权系统应用程序,安装在system/priv-app/
中(它的Android.mk
中有LOCAL_PRIVILEGED_MODULE := true
)
我在AndroidManifest.xml
中添加了<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" />
我在privapp-permissions.xml
中添加了
<privapp-permissions package="<my service package name>">
<permission name="android.permission.FORCE_STOP_PACKAGES"/>
</privapp-permissions>
private void closePackageApp(String namePackage) {
ActivityManager activityManager = (ActivityManager)
context.getSystemService(Context.ACTIVITY_SERVICE);
try {
Method forceStopPackage = activityManager.getClass().
getDeclaredMethod("forceStopPackage", String.class);
forceStopPackage.setAccessible(true);
forceStopPackage.invoke(activityManager, namePackage);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
}
我测试了一下,日志显示应用程序已被关闭。但是在最近使用的屏幕上并没有将该应用删除(日志建议首先使用输入管理器将应用删除后再进行处理!)。
然而,通过比较重新打开时的生命周期,我确信该应用程序确实在后台被关闭了。通常,它是onPause-> onResume,但现在是onPause-> onCreate。
由于Android活动生命周期,您实际上永远不想关闭另一个应用程序。
如果它不是您自己的应用程序,则关闭另一个应用程序始终会带来不利影响,而关闭自己的应用程序也几乎没有什么好处。
http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
如果您确定永远不需要根活动及其子级(即“应用程序”),则可以停止它以释放内存(并不能释放太多内存),但是如果用户在缓存中仍然停止了应用程序,则可能会重新启动该应用,这可能会导致在恢复停止状态时出现问题。因此,这是一种不好的做法。