android - 发送Intent安装应用时,如果获取应用安装的结果

 Cika_用假名说真话 发布于 2022-10-29 12:02

需求:在应用中,能够获取推荐的应用列表,下载应用进行安装,且安装成功后会修改我当前的UI界面。

对于没有Root的机型,我的安装应用的方法就是下载APK到本地后,发送Intent请求,源码如下:

public static boolean installNormal(Context context, String filePath) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    File file = new File(filePath);
    if (!file.exists() || !file.isFile() || file.length() < 0) {
        return false;
    }

    LogUtil.e(TAG, "path=" + filePath);
    intent.setDataAndType(Uri.parse("file://" + filePath),
            "application/vnd.android.package-archive");
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
    return true;
}

使用这种方式,我无法判断出用户最终是否选择安装了应用(因为用户可能取消安装),因此无法进行相关UI的修改。

所以,想问一下大家,使用intent的方法安装应用如何获取应用安装的结果?

我个人想了两种方式:

  1. 注册广播,但是使用广播是否应该动态注册?监听哪些intent?

  2. 写一个线程无限轮询,但是不清楚线程默认的结束时间等相关限制条件?

3 个回答
  • 如果你是覆盖安装 当前的apk的话, 是无法监听到的, 如果你是安装其他程序, 跟本程序的包名不一样的话,广播是能监听到的,具体的IntentFilter要去查.这个官网上面有对应的.

    2022-10-30 17:08 回答
  • 跳出去安装不管用户点安装还是取消,回来都会走onResume的吧,在onResume里再判断下安装状态

    2022-10-30 17:15 回答
  • 监听系统的应用安装或者更新广播
    <action android:name="android.intent.action.PACKAGE_ADDED" />
    <action android:name="android.intent.action.PACKAGE_REPLACED" />
    <action android:name="android.intent.action.PACKAGE_REMOVED" />
    <data android:scheme="package" />
    最后一行是一定要加的, 然后从获得的Intent中提取出package信息,intent.getDataString(),看看是什么应用

    2022-10-30 17:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有