0

サーバーから 1 つの APK ファイルをダウンロードして Phone Storage に保存しようとしていました。

以下は私が使用したコードです:

            String apkLink = "http://10.1.20.53/files/test.apk";
            URL url = new URL(apkLink);
            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();

            context.getDir("test.apk", Context.MODE_WORLD_WRITEABLE);
            FileOutputStream fos = context.openFileOutput("app_test.apk", Context.MODE_WORLD_WRITEABLE);

            InputStream is = c.getInputStream();
            fileSize = c.getContentLength();
            byte[] buffer1 = new byte[1024];
            int len1 = 0;
            int total = 0;
            while ((len1 = is.read(buffer1)) != -1) {
                total += len1;
                percentage = (int)(total*100/fileSize);
                publishProgress();
                fos.write(buffer1, 0, len1);
            }
            fos.close();
            is.close();

同じコードが XML ファイルに対して正常に機能しています。(XML ファイルを電話のメモリにダウンロードしているとき) .

誰かがこれで私を助けることができますか?

ありがとうございました


実はその理由が分かったのですが、

context.getDir("test.apk", Context.MODE_WORLD_WRITEABLE); コード行は、「data/data/package_name/app_test.apk」というディレクトリを作成します

ただし、FileOutputStream fos = context.openFileOutput("app_test.apk"); data/data/package_name/files/app_test.apk というディレクトリを作成します

そして、data/data/package_name/app_test.apk ディレクトリからファイルを読み込もうとしていました。

とにかく、このコードでこのファイルを実行します。

File f = new File(getFilesDir()+ "/app_test.apk");

intent.setDataAndType(Uri.fromFile(f) , "application/vnd.android.package-archive");
startActivity(intent);

しかし、解析エラー メッセージが表示されます。

誰でも解決策を考えることができますか?

ありがとうございました。

4

2 に答える 2

1

ファイルを作成するときに Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE を使用してみてください。

于 2012-06-01T08:21:33.720 に答える
0

ここで同様の質問に答えました。あなたの問題を考えると、なぜそれが機能しないのか、いくつかの異なる意見があります。

  1. あなたのアプリケーションは apk をプライベート フォルダーにダウンロードしますが、PackageManager にはこのフォルダーを読み取る権限がない可能性があります。アプリケーションをSDカードにダウンロードして実行してみてください。
  2. .apk ファイルが適切に署名されていない可能性があります。生成された署名で署名したか、デフォルトのテスト署名でファイルをエクスポートしましたか?
  3. これを実際のデバイスでテストする場合は、(Google Play マーケットだけでなく) 他のソースからファイルをインストールできることを確認してください。
  4. 正確には覚えていませんが、おそらく PackageManager を呼び出してアプリケーションをインストールするには、許可が必要です。
于 2012-05-31T11:43:10.743 に答える