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

How to uninstall android apps using the new PackageInstaller api?

在 API 级别 29 中弃用了使用 ACTION_UNINSTALL_PACKAGE 卸载 android 应用程序的旧方法。现在建议改用 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) 
}

我不知道如何提供 IntentSender。我试图从当前的 activity 发出一个意图,但所有这些代码所做的只是重新创建 activity。有什么想法吗?谢谢

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

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)

上述代码中,pkg为字符串格式的要删除的App的packageName,EXIT_REQUEST为Integer值。