15

ここから、ファイルを作成し、他のアプリや他のインテントにアクセスできるようにする方法を知っていますが、Context.MODE_WORLD_READABLE が廃止されたので、どうすれば安全にこれを達成できますか?

FileOutputStream out = myActivity.openFileOutput(fileTo, Context.MODE_WORLD_READABLE);

詳細情報:

私はこれを使用しています:

intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "video/*");

そして、uri は、sdcard の場所に書き込むものになります。そして、ビデオはアプリケーションから来るので、問題は、これが許可されていない場合、どうすればファイルを書き込んで表示できるかということです。

4

3 に答える 3

12

そして、uri は、sdcard の場所に書き込むものになります。

それはすでにMODE_WORLD_WRITABLEデフォルトです。openFileOutput()また、リストしたコード ( ) は外部ストレージ (誤って「sdcard」と呼ぶもの) に書き込まないことに注意してください。openFileOutput()内部ストレージ用です。

そして、ビデオはアプリケーションから来るので、問題は、これが許可されていない場合、どうすればファイルを書き込んで表示できるかということです。

実際にファイルを外部ストレージに書き込んでいる場合は、そのファイルへのUriポインタを使用してください。

ファイルを内部ストレージに書き込む場合は、そのファイルを提供する を作成し、そのを指す をContentProvider使用します。これは、最初の実行時にPDF ファイルを抽出し、PDF ビューアで表示できるようにそのファイルを提供するサンプル アプリケーションです。UriContentProviderContentProviderassets/openFile()

于 2012-12-13T13:04:43.050 に答える
9

以下を使用して、ビデオを内部メモリに保存します。

openFileOutput("test.mp4", "MODE_PRIVATE");

次に、これを行います:

String path = context.getFilesDir().getAbsolutePath() + "/test.mp4"; // path to the root of internal memory.
File f = new File(path);
f.setReadable(true, false);
Intent playIntent ....
playIntent.setType("video/*");
playIntent.setData(Uri.fromFile(f));

幸運を。

于 2013-06-27T00:08:08.753 に答える
3

ドキュメントはそれについて明確であるように見えます。

この定数は、API レベル 17 で廃止されました。

誰でも読み取り可能なファイルを作成することは非常に危険であり、アプリケーションにセキュリティ ホールを引き起こす可能性があります。強くお勧めしません。代わりに、アプリケーションは、ContentProvider、BroadcastReceiver、および Service などの相互作用のために、より正式なメカニズムを使用する必要があります。バックアップや復元を行う場合など、このアクセス モードがファイルに残るという保証はありません。ファイル作成モード: 作成されたファイルへの読み取りアクセスを他のすべてのアプリケーションに許可します。

于 2012-12-13T09:29:55.570 に答える