我的应用程序中有一项要求,即在指定次数的登录尝试失败后:
这基本上是一种自我毁灭的行为。
在应用程序运行时,您是否可以提供有关卸载应用程序方面的信息?我假设删除文件夹必须很容易。你是否预见到这样做会有任何问题。
由于 甲
答案 0 :(得分:1)
没有公共API允许您无缝删除包(包括您自己的包)。您可以通过触发Intent
并将操作设置为ACTION_UNINSTALL_PACKAGE
来请求删除包,但是用户我们会将此操作通知默认安装程序(即Google Play商店)以执行操作。
答案 1 :(得分:0)
Larry Schiefer是对的,幸运的是没有公共API可以在没有用户交互的情况下执行此操作。但是,如果您具有扩展权限,例如,如果设备已植根并且您的应用具有root访问权限,则可以使用命令行:
Runtime.getRuntime().exec(new String[] {"su", "pm uninstall com.example.yourapplication"})
如果您拥有特殊权限,因为您是系统应用程序,则可以使用隐藏的API,这非常危险,因为它们没有文档记录,可以从一个Android更新更改为下一个。但是,如果您控制安装了哪个版本的操作系统,则可能会使用它。
在这种情况下,您可以通过反思调用PackageManager.deletePackage
。
pm = context.getPackageManager();
Class<?>[] types = new Class[] {String.class, IPackageDeleteObserver.class, int.class};
method = pm.getClass().getMethod("deletePackage", types);
method.invoke(pm, new Object[] {"com.example.com", null, 0})
此功能 还应删除所有包裹数据,因此这是一个完整的擦除。您需要在AndroidManifest.xml
中请求DELETE_PACKAGES权限(只有在您是系统应用程序/系统用户时才会被授予):
<uses-permission android:name="android.permission.DELETE_PACKAGES"/>