2

次のコードを使用して SQLite DB を作成しました。

context.openOrCreateDatabase(dbName, Context.MODE_WORLD_READABLE, null);

そして、次のコードを使用して、電子メールで添付ファイルとして送信しようとしました:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND)
        .setType("message/rfc822")
        .putExtra(android.content.Intent.EXTRA_STREAM,
                Uri.fromFile(getDatabasePath(dbName)));
startActivity(Intent.createChooser(emailIntent, null));

これにより、添付アイコンのある GMail 作成アクティビティが開きます。しかし、受信者は添付ファイルを受け取りませんでした。

これは以前に尋ねられました。しかし、dbファイルをSDカードにコピーする以外に解決策はないようです。

私の質問は次のとおりです。GMail のような別のアプリがファイルを読み取ることができない場合、フラグは何に使用されますか?MODE_WORLD_READABLE

4

1 に答える 1

0

Android ファイルシステムに 2 つのアプリ app_1 と app_2 があるとします。これら 2 つのアプリは /data/data/app_1 と /data/data/app_2 にあり、app_1 は「ユーザー」app_1 です。

/data/data で ls を実行すると、次のように表示されます: drwxr-x--x app_1 app_1 drwxr-x--x app_2 app_2

MODE_WORLD_READABLE は Unix コマンド a+r [file] と同等ですが、ディレクトリのアクセス許可により app_1 は app_2 フォルダーのファイルにアクセスできないため、他のユーザー/アプリケーションはファイルにアクセスできません。

実際、app_1 は /data/data を ls して他のすべてのディレクトリのリストを表示することさえできません。要するに、MODE_WORLD_READBLE は、sdcard などの共有ストレージ上のファイルを処理する場合にのみ役立ちますが、各アプリケーションが実行されている監禁されたサンドボックスでは使用できません。

この情報がお役に立てば幸いです。

于 2012-06-21T17:51:54.037 に答える