2

我在 /res/raw 目录中为另一个应用程序存储了一个 .apk 文件,并希望提示用户安装它。这是我当前的代码:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File("android.resource://" + getPackageName() + "/res/raw/myapk.apk")), "application/vnd.android.package-archive");
startActivity(intent);

但是,当意图运行时,我收到 Parse 错误:There is a problem parsing the package.

.apk 文件是 eclipse 在我运行另一个应用程序时在 /bin 目录中创建的文件。

我将如何正确完成这个程序化的本地安装?

4

3 回答 3

7

我想到了。我最终将我的 .apk 文件放在 /assets 目录中,并以编程方式将其复制到我安装它的 sd 卡中。这是我的代码:

AssetManager assetManager = getAssets();
InputStream in = null;
OutputStream out = null;
try {
    in = assetManager.open("myapk.apk");
    out = new FileOutputStream("/sdcard/myapk.apk");
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
        out.write(buffer, 0, read);
    }
    in.close();
    in = null;
    out.flush();
    out.close();
    out = null;
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(new File("/sdcard/myapk.apk")), "application/vnd.android.package-archive");
    startActivity(intent);
}catch(Exception e){
    // deal with copying problem
}

希望这会帮助其他有类似问题的人!

于 2012-07-30T19:12:23.643 回答
0
String path = "file:///android_asset/raw/myapk.apk";

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive");
startActivity(intent);
于 2012-07-30T18:22:57.727 回答
0

还在清单文件中添加一项权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

否则会出现“权限被拒绝”错误。

于 2012-10-01T11:21:09.310 回答