我启动一个程序A去下载另个一个程序B,下载的这个程序B只能保存在程序A的安装目录下(“/data/data/A/files”),其他地方无权限保存,获取不到输入输出流。但是当我下载完成准备安装时,用Uri.parse("“/data/data/A/B.apk”")时会报解析出错,应该是安装程序无权限访问 ”/data/data/A/“的目录 String cmd = "chmod 777 " +filename;
try {
Runtime.getRuntime().exec(cmd);

} catch (Exception e) { e.printStackTrace();
}    File file = new File(filename);
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.setAction(Intent.ACTION_VIEW); String type = "application/vnd.android.package-archive";
intent.setDataAndType(Uri.fromFile(file), type);
AppManageActivity.this.startActivity(intent);
return intent;
}

解决方案 »

  1.   

    /data/data是程序私有目录,别的程序无读写权限。你启动安装程序,安装程序也没有权限来处理它。
    A程序启动下载,可以将下载的内容保存到sd卡上,就是普通的写文件操作。所有程序都有权限来读写,安装程序就可以来安装它了。
      

  2.   

    下载是下载进去了的 就是安装的时候报解析包异常
    就是因为没有sdk才存到内存中去呀  我看安智市场能实现 就是不知道怎么样实现的
      

  3.   

    安智市场也是下载到卡里面吧,或者是自带的存储设备里面,肯定不是/data/data/xx目录。你看下/data下有哪些目录是完全可读写可执行的,就写到那里面去。
      

  4.   

    安智市场没有scard卡的时候是下载到/data/data/xx下的  我测试过了 多下载一个程序安智市场占用的内存就越大  我想问下除了scard外还有哪个地方是完全可读写可执行的
      

  5.   

    高手帮忙定一下呀  因为我要支持断点下载 所以不能FileOutputStream  output = Context.openOutputFile(filename, Context.MODE_PRIVATE);  这样写入文件 
    只能randomAccessFile = new RandomAccessFile(filename,"rwd");这样写入  这样的话 下载是能下载到/data/data/xx下 但是 安装的时候就报解析包错误
      

  6.   

    String cmd = "chmod 777 " +filename;
    try {
    Runtime.getRuntime().exec(cmd);} catch (Exception e) {e.printStackTrace();
    }