升级时碰见的异常

private void installPackage(String appName,final File apk) {
        if (!apk.exists()) {
            setHasNewVersion(appName,false);
            hideProgressDialog();
            return;
        }
        apk.setReadable(true, false);
        apk.setExecutable(true, false);

        //走完installPackage之后就结束了,回调observer内的代码是异步执行了
        final PackageManager pm = getPackageManager();
        PackageInstallObserver observer = new PackageInstallObserver(appName);
        Log.i(TAG, "install the apk begin : "+appName+";;getAbsolutePath="+apk.getAbsolutePath());
        pm.installPackage(
                Uri.parse("file://" + apk.getAbsolutePath()), observer,
                PackageManager.INSTALL_REPLACE_EXISTING, null);
    }
private class PackageInstallObserver extends IPackageInstallObserver.Stub {
        private String appname;
        public PackageInstallObserver(String appName) {
            appname=appName;
        }

        public void packageInstalled(final String packageName, int returnCode) {
            setHasNewVersion(appname,false);
            String appPath = getFilesDir().getAbsolutePath()+"/apps/"+appname+".apk";
            File apk = new File(getFilesDir(), appname+".apk");

            Log.i(TAG, "install is end and delete "+apk.getAbsoluteFile());
            apk.delete();
            hideProgressDialog();
            ){
                installReturnCode=;
            }else{
                ){
                    installReturnCode=returnCode;
                }else{
                    installReturnCode=-;
                }
            }
            Log.i(TAG, "installReturnCode "+installReturnCode+"; packageName = "+packageName);
            new Thread(){
                public void run() {
                    postUpdateResult(packageName,appname,installReturnCode);//安装成功
                };
            }.start();
        }
    }

异常

W/asset ( 1245): Asset path /data/data/com.****.******/files/apps/pjlauncher.apk is neither a directory nor file (type=0).
W/DefContainer( 1245): Failed to parse package
W/ActivityManager( 535): No content provider found for permission revoke: file:///data/data/com.****.***/files/apps/*****.apk
D/dalvikvm( 535): GC_EXPLICIT freed 573K, 24% free 4589K/6028K, paused 2ms+3ms, total 35ms

I/AppUpgradeService( 1227): install is end and delete /data/data/com.****.******/files/apps/*****.apk

查了好半天有说是要添加权限的,有说是要在使用时给apk修改权限的,试了半天都没有效果。

最后修改了apk文件的下载存放路径,结果安装成功。

* 如果apk下载到这个目录/data/data/com.****.******/files/apps
* 会出现No content provider found for permission这个异常
* 如果是这个目录/data/data/com.****.******/files
* 则没有问题

感觉很奇怪我在其他机顶盒上测试的时候,即使是在/data/data/com.****.******/files/apps这个目录也可以顺利安装apk,但是换了一台机顶盒之后就不可以了

可能是不同机顶盒系统有差异吧!

ps:这个功能需要进行系统签名,以及配置android:sharedUserId="android.uid.system"

Android使用静默安装时碰见的问题的更多相关文章

  1. Android实现静默安装与卸载

    一般情况下,Android系统安装apk会出现一个安装界面,用户可以点击确定或者取消来进行apk的安装. 但在实际的项目需求中,有一种需求,就是希望apk在后台安装(不出现安装界面的提示),这种安装方 ...

  2. Android对于静默安装和卸载

    在一般情况下,Android系统安装apk会有一个安装界面,用户可以单击确定或取消apk设备. 但在实际的项目需求中,有一种需求.就是希望apk在后台安装(不出现安装界面的提示),这样的安装方式称为静 ...

  3. Android的静默安装

    原文 Android的静默安装似乎是一个很有趣很诱人的东西,但是,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安 ...

  4. android apk静默安装

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/47803149 之前有很多朋友都问过我,在Android系统中怎样才能实现静默安装呢 ...

  5. android 实现静默安装、卸载

    方法1:[使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件] import java.io.File ...

  6. android实现静默安装demo

    1.须要RootTools.jar 2.运行脚本 public class InstallerActivity extends Activity {     /** Called when the a ...

  7. Android随笔之——静默安装、卸载

    随笔之所以叫随笔,就是太随意了,说起来,之前的闹钟系列随笔还没写完,争取在十月结束之前找时间把它给写了吧.今天要讲的Android APK的静默安装.卸载.网上关于静默卸载的教程有很多,更有说要调用隐 ...

  8. Android 静默安装/后台安装

    Android实现静默安装其实很简单,今天在网上找资料找半天都说的很复杂,什么需要系统安装权限.调用系统隐藏的api.需要系统环境下编译.需要跟systemUI同进程什么的.我不知道他们真的实现了静默 ...

  9. 静默安装/ 普通安装与root权限获取相关

    静默安装 有时候使用第三方的插件时我们需要静默安装其提供的apk包,静默安装时我们需要获取root权限,如下代码 Process process = Runtime.getRuntime().exec ...

随机推荐

  1. 美国在研新药_读取单个PDF

    QQ:231469242 读取下载美国在研新药PDF内数据:unii,分子式,分子重量,药品名,who,编码,.... PDF无逻辑规则,不能百分之百提取,只能部分提取 几个默认字段为空 # -*- ...

  2. Node.js、Express、Socket.io 入门

    前言 周末断断续续的写了第一个socket.io Demo.初次接触socket.io是从其官网看到的,看着get started做了一遍,根据官网的Demo能提供简单的服务端和客户端通讯. 这个De ...

  3. URL中的特殊字符处理笔记

      URL中的特殊字符 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII ...

  4. 动态LINQ构建(实现等于不等于大于小于,like以及IN)

    首先感谢园子里的“红烧狮子头”,他的工作是本文的基础,引文如下http://www.cnblogs.com/daviddai/archive/2013/03/09/2952087.html,本版本实现 ...

  5. URAL1501. Sense of Beauty(记忆化)

    链接 dfs+记忆化 对于当前状态虽然满足和差 但如果搜下去没有满足的情况也是不可以的 所以需要记忆化下 #include <iostream> #include<cstdio> ...

  6. opencv中的图像区域复制

    openCV作为已经成熟的开源库,很多操作它都已经有了高效,使用方便的方法.我的应用场景是这样的,从一张大图片中抠出一小部分,然后处理这一小部分后再放到大图像中.对于抠出来可以这样实现: Rect r ...

  7. 分布式搜索elasticsearch 文献检索索引 入门

    1.首先,例如,下面的数据被提交给ES该指数 {"number":32768,"singer":"杨坤","size": ...

  8. log4cxx入门第一篇--一个小例子

    先看官网:http://logging.apache.org/log4cxx/index.html 转载自:http://wenku.baidu.com/view/d88ab5a9d1f34693da ...

  9. if与while相互嵌套,菱形*的实现.py

    """    *           * *         * * *       * * * *     * * * * *     * * * *       * ...

  10. Array 数组的排序 sort

    JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序.sort() 方法用于对数组的元素进行排序.语法如下:arrayObject.sort(s ...