如何监控apk安装成功还是失败?

dinjay 2010-07-14 10:06:38
在程序中通过:

String fileName = Environment.getExternalStorageDirectory() + "/" + apkname;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
mService.startActivity(intent);

来安装指定apk,但是如何监控这个程序安装是否成功呢?有没有什么类似的回调方法?都是这用通过intent来实现的功能,如何得知安装状态呢?我要根据安装状态来做一些处理,包括list的更新和提示等。
在线等~
谢谢
...全文
3379 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zx13266879364 2011-06-26
  • 打赏
  • 举报
回复
16楼的HAPKInstallReceiver代码是怎么写的??
l_xd_0214 2010-09-21
  • 打赏
  • 举报
回复
<receiver android:name="com.haolianluo.net.session.module.HAPKInstallReceiver">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.PACKAGE_ADDED"></action>
<data android:scheme="package"/>
</intent-filter>

<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.PACKAGE_REMOVED"></action>
<data android:scheme="package"/>
</intent-filter>
</receiver>


实现这个广播接收者就行了 在接受者中根据获得的ACTION判断是安装还是卸载了 已经试验过了 可以的
dinjay 2010-08-02
  • 打赏
  • 举报
回复
绕道解决了....安装的apk是自己编的工程,指定了packagename,所以我初始化的时候会去搜索一遍本地已经安装的apk的packagename...有的话就是安装成功了,然后更新UI
Happy_of_smile 2010-08-02
  • 打赏
  • 举报
回复
问题解决没,亲爱的楼主,分享下
Zengyangtech 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 vclongking 的回复:]

我看到PackageManager里面有一个方法
installPackage (Uri packageURI, IPackageInstallObserver observer, int flags)

然后如果安装成功:
public static final int INSTALL_SUCCEEDED

Installation return code: this is p……
[/Quote]

IPackageInstallObserver

这个类能直接调么 我试过好像不行
Zengyangtech 2010-08-02
  • 打赏
  • 举报
回复
监控这个事件 Intent.ACTION_PACKAGE_ADDED

具体监控apk包安装 删除 替换的源码看我的博客
http://blog.csdn.net/Zengyangtech/archive/2010/07/16/5738940.aspx
dinjay 2010-07-14
  • 打赏
  • 举报
回复
startActivityForResult在sdk中有明确说明,如果intent类型是ACTION_VIEW或者ACTION_MAIN那是不会得到返回结果的。实际上我也试了,确实是不进那个onActivityResult回调....

我现在只能是通过搜索本地已安装的app应用来判断是否安装成功....
vclongking 2010-07-14
  • 打赏
  • 举报
回复
关注一下。
SkyGray 2010-07-14
  • 打赏
  • 举报
回复
可不可以通过底层的Runtime.getRuntime().exec(cmd)这些来执行 adb install的命令,然后重定向adb返回结果?然后判断这个结果成功或失败?我没试过,只是一个思路。。。
Hinagi 2010-07-14
  • 打赏
  • 举报
回复
查下api看看有没有返回值

个人觉得应该是startActivityForResult,然后应该会有一个返回的,纯属猜测
yihua0001 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 vclongking 的回复:]
我看到PackageManager里面有一个方法
installPackage (Uri packageURI, IPackageInstallObserver observer, int flags)

然后如果安装成功:
public static final int INSTALL_SUCCEEDED

Installation return code: this is pa……
[/Quote]
相信PackageManager应该有这个机制,顶一下。
vclongking 2010-07-14
  • 打赏
  • 举报
回复
我看到PackageManager里面有一个方法
installPackage (Uri packageURI, IPackageInstallObserver observer, int flags)

然后如果安装成功:
public static final int INSTALL_SUCCEEDED

Installation return code: this is passed to the IPackageInstallObserver by installPackage(android.net.Uri, IPackageInstallObserver, int) on success.

这样能否在IPackageInstallObserver里面监听对比INSTALL_SUCCEEDED这个CODE值了 , 就知道安装成功没
dinjay 2010-07-14
  • 打赏
  • 举报
回复
看了下安装时候的log

07-14 05:43:20.276: INFO/ActivityManager(587): Displayed activity com.android.packageinstaller/.InstallAppConfirmation: 1030 ms (total 1030 ms)

07-14 05:43:21.298: INFO/InstallAppConfirmation(909): [color=#FF0000]result ok


07-14 05:43:21.417: INFO/ActivityManager(587): Starting activity: Intent { dat=file:///data/data/com.android.packageinstaller/files/SkinTest.apk cmp=com.android.packageinstaller/.InstallAppProgress (has extras) }

07-14 05:43:24.300: INFO/PackageManager(587): Removing non-system package:com.skintest.skintest

07-14 05:43:24.526: INFO/PackageManager(587): /data/app/vmdl73869.tmp changed; unpacking

07-14 05:43:35.096: INFO/InstallAppDone(909): Finished installing ApplicationInfo{437b9818 com.skintest.skintest}

[/color]

感觉红色的地方应该就可以判断了,但是不知道这个PackageManager能不能监控到,再研究研究~


SkyGray 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kenshintang1215 的回复:]

引用 6 楼 skygray 的回复:

刚试了下,android 环境本身不支持 adb 命令。。。
adb permission denied....


不是不支持,是权限的问题,应用程序权限很低,而且很难获取到root
[/Quote]
是地。。。
Hinagi 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 skygray 的回复:]

刚试了下,android 环境本身不支持 adb 命令。。。
adb permission denied....
[/Quote]

不是不支持,是权限的问题,应用程序权限很低,而且很难获取到root
SkyGray 2010-07-14
  • 打赏
  • 举报
回复
刚试了下,android 环境本身不支持 adb 命令。。。
adb permission denied....
vclongking 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dinjay 的回复:]
startActivityForResult在sdk中有明确说明,如果intent类型是ACTION_VIEW或者ACTION_MAIN那是不会得到返回结果的。实际上我也试了,确实是不进那个onActivityResult回调....

我现在只能是通过搜索本地已安装的app应用来判断是否安装成功....
[/Quote]我看了一下DOC里面的setDataAndType()方法 ,要求配置一个MIME type
MIME type是什么东西啊?

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧