Android 获取android安装apk框的安装状态(如点击取消、返回)

最近鼓捣android,碰到个问题,因为没有root权限,需要调用Intent安装apk,但需要获取用户是否安装了(如,用户点击了返回或取消),查了很多文章,最后可以解决,但有瑕疵,解决方法如下:

public static void installPackage(Context context, File file, int requestCode) {
    // 安装之前先记录预安装APK文件的名字,以用于返回结果时根据requestCode获取安装的apk packageName
    MainActivity.m_mapInstallApkData.put(requestCode, file.getName());

    //gxj: 如果主界面没有显示,需要调出主界面到前台
    Intent it1 = new Intent(context, MainActivity.class);
    it1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
    context.startActivity(it1);

    //gxj: <span style="color:#ff0000;">不使用FLAG_ACTIVITY_NEW_TASK是因为无法获取result</span>,同时又要保持多个apk(task)的安装(FLAG_ACTIVITY_SINGLE_TOP / FLAG_ACTIVITY_PREVIOUS_IS_TOP)
    //<span style="color:#ff0000;">对于使用FLAG_ACTIVITY_SINGLE_TOP / FLAG_ACTIVITY_PREVIOUS_IS_TOP的情况,startActivityForResult只有在所有的安装界面消失的时候才会有返回,且返回的resultCode都是0,疑惑,所以在返回后需要检查否安装成功的判断</span>
    //不能使用Intent.FLAG_ACTIVITY_NEW_TASK是因为Intent.FLAG_ACTIVITY_NEW_TASK无法获得返回的结果;不能使用Intent.FLAG_ACTIVITY_CLEAR_TOP是因为可能会有多个apk同时安装
    Intent it2 = new Intent();
    it2.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP );    //或FLAG_ACTIVITY_PREVIOUS_IS_TOP
    it2.setAction(android.content.Intent.ACTION_VIEW);
    Uri path = Uri.fromFile(file);
    it2.setDataAndType(path, "application/vnd.android.package-archive");
    context.startActivityForResult(it2, requestCode);
}

在MainActivity中添加protected void onActivityResult(int requestCode, int resultCode, Intent data)处理

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    String strPackageName = null;
    if (m_mapInstallApkData != null)
        strPackageName = m_mapInstallApkData.remove(requestCode);

    //不知道为什么,不管是否点击安装、取消,返回的resultCode都是0,即RESULT_CANCELED,待查
    if (resultCode == RESULT_CANCELED) {
        if (!TextUtils.isEmpty(strPackageName)) {
            //需要重新检查该packageName是否安装了
            //..做自己的处理
        }
    }
}

注:该程序有瑕疵,就是假如弹出安装apk的框A和apk框B,点击B的取消没有反应,只有在A、B的安装框都消失(点击安装或取消或返回)后才会有返回(分别返回了A和B的结果),解决方法还没有找到,待

时间: 2024-11-07 20:07:55

Android 获取android安装apk框的安装状态(如点击取消、返回)的相关文章

Gulp构建Android项目,安装APK

Gulp构建Android项目,安装APK 上一节Gulp安装及使用这篇文章中说到,Gulp可以执行终端命令,是不是有很多想法呢,:) 这篇没有多少技术性,仅供娱乐 测试环境 Mac:10.10.4 Gulp:3.9.0 Android studio:1.3 time:2015年08月21日17:29:07 前提 整个Android项目在Android studio中已经编译好,可以正常运行.如果没有编译好的话,只能是在终端输出错误日志了. 文件目录 root |----gulpfils.js

android 命令行安装apk

有两种方式可以在android模拟器或真机上使用命令行安装apk 一种是使用adb install命令,网上通常是这种方式 另一种是通过android提供的命令,pm install. 需要先进入android命令行:adb shell 然后执行对应pm命令. pm命令的说明,转载另一篇博客:Android下pm 命令详解 具体内容摘录如下,以便以后查看: 0. Usage: usage: pm [list|path|install|uninstall] pm list packages [-f

【树莓派】在树莓派的Android系统中安装APK应用

树莓派3 Android TV安装APK应用教程 本文摘自:http://www.mz6.net/news/android/6867.html 树莓派3 Android TV怎样安装软件?对于熟悉ADB的网友来说安装过程并不复杂,通过ADB远程连接到树莓派,然后使用ADB命令安装应用,当然小白也可以按照下面的教程学会怎样安装应用. 树莓派3安装Android TV系统图文教程 http://www.mz6.net/news/android/6865.html 树莓派3安装APK应用教程 1.首先

Android之——通用安装apk方法

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46955863 不多说,直接上代码: public void installApk(){ Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); //根据实际情况获取apk名称 String name = "test.apk"; File file = new File(Environment

如何在Android模拟器上安装apk文件

1.运行SDK Manager,选择模拟器,并运行模拟器 SDK Manager应用 2.将需要安装的apk文件复制到platform-tools目录下(默认在:C:\Program Files\Android\android-sdk-windows\platform-tools ).为安装方便,这里将其命名为game.apk 3.点击开始→运行,输入cmd,打开cmd窗口.输入cd C:\Program Files\android-sdk-windows\platform-tools,进入pl

Monkey学习(3)如何在Android模拟器中安装apk

1.运行SDK Manager,选择模拟器,并运行模拟器,我这里用的是已经配置好的模拟器“RedMI” 2.已启动好的模拟器“RedMI” 3.记住需要安装apk文件的位置,我这里放在了F盘的根目录下  我下载的是抠电影的apk文件,为安装方便,这里将其命名为kouMovie.apk 点击开始→运行,输入cmd,打开cmd窗口.输入  “F:”  回车,进入F盘目录 输入命令:adb install kouMovie.apk,回车,稍等,完成apk在模拟器上的安装. 4.打开模拟器,可看到安装的

Android Studio 第七十期 - Android下载图片安装apk 获取权限

代码已经整理好,效果如下图: 地址:https://github.com/geeklx/myapplication2018/tree/master/p013_updatemanagerpermission 原文地址:http://blog.51cto.com/liangxiao/2150519

在Android模拟器里安装apk

[原文]http://Android.tgbus.com/android/tutorial/201104/349532.shtml 1.运行SDK Manager,选择模拟器,并运行模拟器. 2.将需要安装的apk文件复制到platform-tools目录下(默认在:C:\Program Files\Android\android-sdk-windows\platform-tools ).为安装方便,这里将其命名为game.apk 3.点击开始→运行,输入cmd,打开cmd窗口.输入cd C:\

android手机上安装apk时出现解析包错误的一个解决办法

今天下午在学习安卓开发时,学习开发文档中的gridview时,在模拟器上调试程序一切正常,如下图所示: 但当将bin目录下的HelloGridView.apk拷贝到M8安卓系统后进行安装时,出现了“解析包错误”的提示,在网上搜索答案未果后,经过和以前的例子相对比,发现了我在创建android工程时,由于使用的SDK为2.3.3版本,所以选择的minSdkVersion="10",而m8的android版本为2.2.所以试着将AndroidManifest.xml中的minSdkVers