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 甚至无法通过 ls /data/data 查看所有其他目录的列表。最重要的是,MODE_WORLD_READBLE 仅在您处理共享存储(如 sdcard)上的文件时有用,而不是在每个应用程序正在运行的监狱沙箱上处理文件时有用。

我希望这些信息对你有用。

于 2012-06-21T17:51:54.037 回答