0

Android の内部キャッシュに保存された APK のインストールに問題があります。context.getExternalCacheDir()を使用して外部ストレージまたは外部キャッシュにファイルを保存しても問題はありません。

しかし、context.getCacheDir()を使用しようとすると、ログが返されます

/data/data/com.my.package/cache/update.apk: 開くことができませんでした: EACCES (許可が拒否されました)

                File file = context.getCacheDir();

                File outputFile = new File(file, "update.apk");
                if(outputFile.exists()){
                    outputFile.delete();
                }

                FileOutputStream fos = new FileOutputStream(outputFile);


                InputStream is = c.getInputStream();

                byte[] buffer = new byte[1024];
                int len1 = 0;
                while ((len1 = is.read(buffer)) != -1) {
                    fos.write(buffer, 0, len1);
                }
                fos.close();
                is.close();

                Intent intent = new Intent(Intent.ACTION_VIEW);

                //SAVE IN CACHE
                intent.setDataAndType(Uri.fromFile(outputFile), "application/vnd.android.package-archive");

                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error!
                context.startActivity(intent);

内部キャッシュで APK を正しく読み取れないようです。

実際には、ファイルが外部ストレージまたは外部キャッシュに保存されている場合、ユーザーは APK を利用できますが、それは望ましくありません。

ファイルを内部キャッシュに保存するにはどうすればよいですか?

ありがとう

4

2 に答える 2

3

内部キャッシュではAPKを正しく読み取れないようです。

これは、インストーラーアプリにファイルを読み取る権限がないためです。

実際、ファイルが外部ストレージまたは外部キャッシュに保存されている場合、APKはユーザーが利用できるようになりますが、私はそれを望んでいません。

その後、ユーザーのデバイスにインストールしないでください。すべてのユーザーは、インストール後いつでもデバイスからAPKをコピーできます。したがって、ユーザーがAPKにアクセスできないようにする唯一の方法は、そもそもデバイスにAPKを持たないことです。

ファイルを内部キャッシュに保存するのはどうすればよいですか?

おそらく何もありません。に切り替えると、インストーラーが続行するのに十分openFileOutput()かどうかを確認できます。MODE_WORLD_READABLE繰り返しますが、これによってユーザーがAPKファイルにアクセスできなくなることはありません。

于 2012-09-24T19:09:13.200 に答える
0

chmodコマンドを調べて、内部フォルダーの読み取り/書き込み権限を取得してみてください...Linuxの場合は次のようになります...

 chmod 777 /data/data/*** or chmod 644 /data/data/***
于 2012-09-24T19:07:40.917 に答える