Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用“世界可读”模式创建的文件不能通过电子邮件作为附件发送_Android_Email Attachments - Fatal编程技术网

Android 使用“世界可读”模式创建的文件不能通过电子邮件作为附件发送

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

我使用以下代码创建了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));
并尝试使用以下代码通过电子邮件将其作为附件发送:

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上访问另一个应用程序的文件