安装置于assets文件夹中的.apk文件,而不将其复制到SD卡

时间:2013-11-25 09:49:29

标签: android eclipse

我在Eclipse中创建了一个应用程序,并在此应用程序的assets文件夹中放置了一些其他.apk个文件。我添加了一些图像按钮和onClick我想安装置于assets文件夹中的.apk应用程序而不将其复制到外部SD卡。我正在尝试以下代码,但我得到了Parse Error。这是代码:

ImageButton animal1 = (ImageButton)findViewById(R.id.imageButton1);
animal1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    AssetManager assetManager = getAssets();
    InputStream in = null;
    OutputStream out = null;
    try {
        in = assetManager.open("Animal Game.apk");
        out = new FileOutputStream("/data/data/com.mypack.myproj/Animal Game.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(newFile("/data/data/com.mypack.myproj/files/Animal Game.apk")), "application/vnd.android.package-archive");

        startActivity(intent);
    } catch(Exception e) {
            Toast.makeText(getBaseContext(), "Error: "+e, Toast.LENGTH_LONG).show();
        }
     }
}); 

我得到的错误是Parse Error:

  

解析包时出现问题。

请有人帮我解决此错误

1 个答案:

答案 0 :(得分:1)

您必须先将apk文件复制到SD卡,然后再将其传递给PackageManager,因为PackageManager作为独立应用程序在单独的进程中运行,并且无法访问应用程序的内部文件。