【问题标题】:How to uninstall android apps using the new PackageInstaller api?如何使用新的 PackageInstaller api 卸载 android 应用程序?
【发布时间】:2020-08-10 00:45:27
【问题描述】:

使用 ACTION_UNINSTALL_PACKAGE 卸载 Android 应用程序的旧方法在 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) 
}

我不知道如何提供IntentSender。我试图从当前活动和到当前活动做出意图,但所有这些代码所做的只是重新创建活动。请问有什么想法吗?并感谢

【问题讨论】:

  • “我试图在当前活动中创建一个意图,但所有这些代码所做的只是重新创建活动”——然后可能使用getBroadcast() 并路由到BroadcastReceiver。卸载操作完成后,我们不知道您要做什么。
  • 正常情况下,当尝试卸载应用程序时,会出现一个弹出窗口,提示用户是卸载应用程序还是取消,但在这种情况下没有任何反应
  • 我认为IntentSender 是为了最终结果,而不是为了用户确认。用户确认将由操作系统提出。你有卸载包的权限吗?
  • 是的,我添加了文档中指定的必要权限,但仍然没有任何反应

标签: android uninstallation packageinstaller


【解决方案1】:

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

Intent.ACTION_DELETE

另外你还需要添加删除包的权限。

这是完整的代码:

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值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-11
    • 2015-12-05
    • 1970-01-01
    • 2010-09-11
    • 2021-05-06
    • 1970-01-01
    • 2012-04-13
    • 2011-01-01
    相关资源
    最近更新 更多