如何使用新的 PackageInstaller api 卸载 Android 应用程序?

Ton*_*Joe 5 android uninstallation packageinstaller

卸载 Android 应用程序的旧方法ACTION_UNINSTALL_PACKAGE在 API 级别 29 中已弃用。现在建议改用PackageInstaller.uninstall(packageName: String, statusReceiver: IntentSender)。这是到目前为止的想法:

fun uninstal(){
    val packageName = "some package name"
    val packageInstaller = this.packageManager.packageInstaller
    val intent = Intent(this, this::class.java)
    val sender = PendingIntent.getActivity(this, 0, intent, 0)
    packageInstaller.uninstall(packageName, sender.intentSender) 
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何提供IntentSender. 我尝试在当前活动中创建一个意图,但这些代码所做的只是重新创建该活动。有什么想法吗?谢谢

Rob*_* CK 2

基于 Intent 的方法仍然适用于 API 级别 29+ 的设备。只需将您的 Intent 操作更改为

意图.ACTION_DELETE

您还需要添加删除包的权限。

<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES"/>

这是完整的代码:

val pkg             = "package_to_delete" 
val uri: Uri        = Uri.fromParts("package", pkg, null)
val uninstallIntent = Intent(Intent.ACTION_DELETE, uri)

startActivityForResult(uninstallIntent, EXIT_REQUEST)
Run Code Online (Sandbox Code Playgroud)

上面的代码中,pkg 是要删除的 App 的 packageName,采用字符串格式,EXIT_REQUEST 是一个 Integer 值。