Android 使用“世界可读”模式创建的文件不能通过电子邮件作为附件发送
我使用以下代码创建了SQLite DB:Android 使用“世界可读”模式创建的文件不能通过电子邮件作为附件发送,android,email-attachments,Android,Email Attachments,我使用以下代码创建了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_STREA
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));
并尝试使用以下代码通过电子邮件将其作为附件发送:
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等其他应用程序无法读取文件,
模式世界可读
标志有什么用?假设我们有两个应用程序app\u 1和app\u 2
在android文件系统上,这两个应用程序位于/data/data/app_1和/data/data/app_2上
其中app_1是“用户”app_1
如果在/data/data上运行ls,您将看到如下内容:
drwxr-x--x应用程序1应用程序1
drwxr-x--x应用程序2应用程序2
模式_WORLD_READABLE相当于Unix命令a+r[file]
但是,这不允许其他用户/应用程序访问该文件,因为目录权限不允许app_1访问app_2文件夹上的文件
事实上,app_1甚至无法通过ls/data/data查看所有其他目录的列表。
总之,只有在处理共享存储(如SD卡)上的文件时,模式_WORLD_readable才有用,而不是在每个应用程序正在运行的被囚禁的沙箱上
我希望这些信息有帮助。假设我们有两个应用程序app_1和app_2 在android文件系统上,这两个应用程序位于/data/data/app_1和/data/data/app_2上 其中app_1是“用户”app_1 如果在/data/data上运行ls,您将看到如下内容: drwxr-x--x应用程序1应用程序1 drwxr-x--x应用程序2应用程序2 模式_WORLD_READABLE相当于Unix命令a+r[file] 但是,这不允许其他用户/应用程序访问该文件,因为目录权限不允许app_1访问app_2文件夹上的文件 事实上,app_1甚至无法通过ls/data/data查看所有其他目录的列表。 总之,只有在处理共享存储(如SD卡)上的文件时,模式_WORLD_readable才有用,而不是在每个应用程序正在运行的被囚禁的沙箱上
我希望这些信息对您有所帮助。使用电子邮件发送数据库似乎不是那么简单。使用一些序列化方法。。无论如何,android中的应用程序都是沙盒,这可能就是问题的原因。当使用附件或其他类型的共享方法时,必须确保文件在沙盒之外。@Erb如果文件是沙盒,那么
MODE\u WORLD\u READABLE
标志有什么用?使用电子邮件发送数据库似乎并不简单。使用一些序列化方法。。无论如何,android中的应用程序都是沙盒,这可能就是问题的原因。当使用附件或其他类型的共享方法时,您必须确保文件在沙盒之外。@Erb如果文件是沙盒,则使用MODE\u WORLD\u READABLE
标志有什么用?PS如果您想测试此行为,并且您的设备/仿真器上有根,您可以执行类似于cd/data/data的操作,然后使用su app\u 1,然后尝试在/data/data/app_2PS上访问另一个应用程序的文件如果您想测试此行为,并且您的设备/仿真器上有root用户,则可以执行类似于cd/data/data的操作,然后执行su app_1,然后尝试在/data/data/app_2上访问另一个应用程序的文件