2

別のアプリの .apk ファイルを /res/raw ディレクトリに保存しており、ユーザーにインストールを促すプロンプトを表示したいと考えています。これが私の現在のコードです:

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);

ただし、インテントが実行されると、解析エラーが発生します。There is a problem parsing the package.

.apk ファイルは、他のアプリケーションを実行したときに /bin ディレクトリにある Eclipse によって作成されたファイルです。

このプログラムによるローカル インストールを正しく行うにはどうすればよいですか?

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

また、マニフェスト ファイルに 1 つのアクセス許可を追加します

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

そうしないと、「許可が拒否されました」というエラーが発生します。

于 2012-10-01T11:21:09.310 に答える