在程序中通过: 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的更新和提示等。
在线等~
谢谢

解决方案 »

  1.   

    查下api看看有没有返回值个人觉得应该是startActivityForResult,然后应该会有一个返回的,纯属猜测
      

  2.   

    可不可以通过底层的Runtime.getRuntime().exec(cmd)这些来执行 adb install的命令,然后重定向adb返回结果?然后判断这个结果成功或失败?我没试过,只是一个思路
      

  3.   

    startActivityForResult在sdk中有明确说明,如果intent类型是ACTION_VIEW或者ACTION_MAIN那是不会得到返回结果的。实际上我也试了,确实是不进那个onActivityResult回调....我现在只能是通过搜索本地已安装的app应用来判断是否安装成功....
      

  4.   

    我看了一下DOC里面的setDataAndType()方法 ,要求配置一个MIME type
    MIME type是什么东西啊?
      

  5.   

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

  6.   


    不是不支持,是权限的问题,应用程序权限很低,而且很难获取到root
      

  7.   

    看了下安装时候的log07-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 ok07-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.skintest07-14 05:43:24.526: INFO/PackageManager(587): /data/app/vmdl73869.tmp changed; unpacking07-14 05:43:35.096: INFO/InstallAppDone(909): Finished installing ApplicationInfo{437b9818 com.skintest.skintest}[/color]感觉红色的地方应该就可以判断了,但是不知道这个PackageManager能不能监控到,再研究研究~
      

  8.   

    我看到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值了 , 就知道安装成功没
      

  9.   

    相信PackageManager应该有这个机制,顶一下。
      

  10.   

    绕道解决了....安装的apk是自己编的工程,指定了packagename,所以我初始化的时候会去搜索一遍本地已经安装的apk的packagename...有的话就是安装成功了,然后更新UI
      

  11.   

    监控这个事件 Intent.ACTION_PACKAGE_ADDED具体监控apk包安装 删除 替换的源码看我的博客
    http://blog.csdn.net/Zengyangtech/archive/2010/07/16/5738940.aspx
      

  12.   


    IPackageInstallObserver这个类能直接调么 我试过好像不行
      

  13.   

    <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判断是安装还是卸载了   已经试验过了 可以的
      

  14.   

    16楼的HAPKInstallReceiver代码是怎么写的??