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的结果),解决方法还没有找到,待
Android 获取android安装apk框的安装状态(如点击取消、返回)的更多相关文章
- android获取未安装APK签名信息及MD5指纹
站在巨人的肩膀上写博客: http://blog.csdn.net/wulianghuan/article/details/18400581 http://www.jb51.net/article/7 ...
- android 命令行安装apk
有两种方式可以在android模拟器或真机上使用命令行安装apk 一种是使用adb install命令,网上通常是这种方式 另一种是通过android提供的命令,pm install. 需要先进入an ...
- 【树莓派】在树莓派的Android系统中安装APK应用
树莓派3 Android TV安装APK应用教程 本文摘自:http://www.mz6.net/news/android/6867.html 树莓派3 Android TV怎样安装软件?对于熟悉AD ...
- android 内部存储 安装apk
在做应用自动更新模块下载apk时遇到了内部存储和sd卡存储两种情况,存在sk卡中存储apk可以正常安装,可是在内部存储中安装apk时出现了parse error的问题. 在网上搜了搜,大致分为两种方案 ...
- Monkey入门之如何在android虚拟机中安装apk包
如果想把公司的产品apk包安装到android虚拟机中,应该进行如下操作: 1.首先将apk包放到C:\Program Files\Android\android-sdk\platform-tools ...
- Android获取手机安装的浏览器列表
最近碰到一个同事询问如何查询本地安装的浏览器列表,其使用的代码如下: public static List<ResolveInfo> getBrowserList(Context cont ...
- Android模拟器Genymotion安装apk
一.下载apk 选择你需要安装的apk进行下载,下载完以后放在与adb.exe同一目录下: 看我的 二.安装apk遇到的问题 开启Genymotion模拟器,然后cmd到你的platform-tool ...
- Monkey学习(3)如何在Android模拟器中安装apk
1.运行SDK Manager,选择模拟器,并运行模拟器,我这里用的是已经配置好的模拟器“RedMI” 2.已启动好的模拟器“RedMI” 3.记住需要安装apk文件的位置,我这里放在了F盘的根目录下 ...
- android之手动安装apk到模拟器
一.将apk放到SDK的指定路径 二.打开命令行 三.安装apk到模拟器 此处遇到无法找到主机,解决办法: 发现是进程2512堵塞导致的 进入powershell 查看进程 发现2512进程是360手 ...
随机推荐
- [ZJOI2008]杀蚂蚁antbuster
[ZJOI2008]杀蚂蚁antbuster 题目 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试 ...
- Uva122 Trees on the level
Background Trees are fundamental in many branches of computer science. Current state-of-the art para ...
- 常州模拟赛d7t1 亲戚
分析:把题目换个方式理解,就是把各个点排成一列,并且指定了若干对的先后次序,问你有多少种序列满足要求. 显然是一道dp题,直接推出方程似乎有点点困难,那么先看看数据特点. 1.有一些点满足fi=0,那 ...
- hdu 2647拓扑排序 结构体模拟容器
#include<stdio.h> #include<queue> #include<iostream> using namespace std; #define ...
- 过河(codevs 1155)
题目描述 Description 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥 ...
- vim下多行注释与解注释
1.多行注释 (1)按esc进入命令行模式 (2)按下Ctrl+v,进入区块模式,并使用上下键选择需要注释的多行 (3)按下“I”(大写)键,进入插入模式 (4)输入注释符(“//”或“#”等) (5 ...
- HDU1530(最大团)
Given a graph G(V, E), a clique is a sub-graph g(v, e), so that for all vertex pairs v1, v2 in v, th ...
- 【python】蛋疼的中文乱码解决方案
转自: http://yooooo.us/2013/python-encoding-decoding?variant=zh-cn
- 连载:面向对象葵花宝典:思想、技巧与实践(34) - DIP原则
DIP,dependency inversion principle,中文翻译为"依赖倒置原则". DIP是大名鼎鼎的Martin大师提出来的.他在1996 5月的C++ Repo ...
- easyui 后台框架搭建
近期公司要搭建一个后台管理项目.因为美工缺少 选择使用easyui jquery 框架 仅仅要懂点html js 这个用起来不是难事,看过API.在网上看了些 将它们组装起来 进行改动.因为本人也是第 ...