卸载应用程序的隐含意图?

Posted

技术标签:

【中文标题】卸载应用程序的隐含意图?【英文标题】:Implicit intent to uninstall application? 【发布时间】:2011-12-13 16:25:54 【问题描述】:

我试图让 onclicklistener 调用意图来卸载应用程序,方法是让意图从应用程序设置中调用默认的“卸载应用程序”活动。我找到了here 我可以使用 ACTION_UNINSTALL_PACKAGE、com.packageXYXY 卸载应用程序,这似乎是我正在寻找的。 但是,我不确定如何调用它。我尝试了以下方法:

public void onClick(DialogInterface dialog, int which) 
                Uri packageURI = Uri.parse("package:com.packageName");
                Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI);
                startActivity(uninstallIntent);

但语法错误。尝试了多种不同的调用方式,但我有点卡住了。不知道怎么称呼这个。感谢您的帮助。

【问题讨论】:

【参考方案1】:

首先,请注意 ACTION_UNINSTALL_PACKAGE 仅适用于 android-14(即 Ice Cream Sandwich,Android 4.0)。也就是说,以下代码对我有用:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.view.View;
import android.net.Uri;
import android.content.Intent;

public class TestActivity extends Activity

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView view = (TextView)findViewById(R.id.test_view);
        view.setOnClickListener(new View.OnClickListener()
          public void onClick(View view)
            Uri packageUri = Uri.parse("package:org.klnusbaum.test");
            Intent uninstallIntent =
              new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri);
            startActivity(uninstallIntent);
          
        );
    

如果您希望能够在所有版本的 android 平台上执行此操作,只需将 Intent 从 Intent.ACTION_UNINSTALL_PACKAGE 更改为 Intent.ACTION_DELETE,就像 @goto10 所做的那样。

【讨论】:

谢谢。你知道打开卸载应用程序活动的意图吗? @goto10 是对的(我支持 goto10,感谢您的提示)。我已编辑我的答案以包含该信息。 “android.intent.action.DELETE”和“Intent.ACTION_DELETE”有什么区别? 如果你在清单文件<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />添加了权限就可以了 Android 9 及更高版本需要权限。否则不会出现卸载对话框。只需在清单文件中提及 【参考方案2】:

改用 ACTION_DELETE。这就是this example 的建议。

编辑:我刚刚自己测试过,效果很好。

【讨论】:

this example 的链接已损坏。我正在参考这个问题***.com/questions/11062780/…【参考方案3】:

在Api Demos 中,看起来他们提供了活动的完整路径,而不仅仅是包本身。这看起来很奇怪,因为helloactivity 活动未在该项目的清单中声明。所以也许它只是包路径......

但是,在您的意图中将额外的EXTRA_RETURN_RESULT 设置为true,然后启动结果活动并检查结果代码,也许它会在数据意图中返回一个代码/额外字段,说明错误是什么(请阅读相关文档)

【讨论】:

以上是关于卸载应用程序的隐含意图?的主要内容,如果未能解决你的问题,请参考以下文章

隐含意图:将图像从画廊分享到我的应用程序

处理 Lollipop 中的隐含意图未来弃用

具有隐含意图的自定义权限

是否可以以编程方式卸载 Android 中的软件包

应用程序如何检测到它将被卸载? [复制]

运行 Windows 卸载程序时关闭应用程序