Android电子邮件SQLite数据库
我希望能够通过电子邮件发送我在应用程序中使用的SQLite数据库,作为用户可以执行的备份形式。我的当前代码如下,数据库在电子邮件意图中显示为附件,电子邮件将发送,但附件未发送Android电子邮件SQLite数据库,android,Android,我希望能够通过电子邮件发送我在应用程序中使用的SQLite数据库,作为用户可以执行的备份形式。我的当前代码如下,数据库在电子邮件意图中显示为附件,电子邮件将发送,但附件未发送 File file = new File(Environment.getDataDirectory(), "/data/com.app/databases/databaseName"); Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Inte
File file = new File(Environment.getDataDirectory(), "/data/com.app/databases/databaseName");
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{""});
intent.putExtra(Intent.EXTRA_SUBJECT, "Backup");
intent.putExtra(Intent.EXTRA_TEXT, "");
intent.setType("application/octet-stream");
intent.putExtra(Intent.EXTRA_STREAM, file.toURI());
startActivity(Intent.createChooser(intent, "Send Email"));
我记得很久以前我就遇到过这个问题。我不确定我做了什么来修复它,但我的工作代码看起来像这样
File root = Environment.getExternalStorageDirectory();
String fileName = "foo.txt";
if (root.canWrite()) {
attachment = new File(root, fileName);
}
email.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(attachment));
startActivity(Intent.createChooser(email, "Send Email"));
我确实记得,由于我使用SD卡存储,如果我仍然通过USB连接到我的计算机,它将不会发送我的附件(因为它使SD卡保持安装状态并处于忙碌状态)。一旦我拔下USB连接,一切正常。看这个链接:你需要传递URI
解决办法是:
文件必须作为附件附上
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/mysong.mp3"));
你需要额外的/in文件://(在堆栈溢出帖子中丢失),否则GMail会在发送之前丢弃附件,声明文件路径错误
因此,您需要额外的/在文件中,并且它不会被删除。。。。希望这有助于在尝试发送电子邮件之前将数据库导出到sd卡。无法从应用程序的数据/数据文件夹中添加附件。这些文件是应用程序的私有文件
上面的SO答案很好地展示了如何复制DB文件,将其作为附件发送电子邮件,然后删除复制的文件。查看。您是否有机会在这里发布正确的工作代码,并附上@dfetter88的建议?