我到处寻找,我无法知道如何做到这一点;我很沮丧......
如何允许用户发送(通过电子邮件)SQLite数据库文件?
简而言之就是这样。我可以将它转换为字符串并附加,但我想发送实际的db文件。我正在使用没有外置SD卡的新手机。
应用程序只是用户填写的表单,然后保存到SQLite数据库。这非常有效。就像将数据库打印到字符串(文本)然后发送它一样。但是,我希望用户通过电子邮件发送实际的db文件(因此我可以使用C#来读取,处理它,并“重新创建”一个真实的表单)。
或者我应该使用SQLite以外的东西?
编辑:就我所做的而言。它似乎工作,但它实际上并没有附加文件,或者更确切地说文件是“空白/空”。调试日志说没有这样的文件或目录。此处调试日志的屏幕截图:http://imgur.com/oyzdtuJ
//trying again to send a SQL db file
//this seems to work and shows that it's attaching a file, but the file is empty so it won't attach
//gmail will say "cant attach empty file"
private void sendFile(String email){
File myFile = this.getFileStreamPath("testresults.db");
if(myFile != null) {
Log.d("LOG PRINT SHARE DB", "File Found, Here is file location: " + myFile.toString());
}else {
Log.w("Tag", "file not found!");
}
Uri contentUri = FileProvider.getUriForFile(this, "com.columbiawestengineering.columbiawest.MainActivity", myFile);
Log.d("LOG PRINT SHARE DB", "contentUri got: here is contentUri: " + contentUri.toString());
//grant permision for app with package "com.columbiawestengineering.columbiawest", eg. before starting other app via intent
this.grantUriPermission("com.columbiawestengineering.columbiawest", contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
Log.d("LOG PRINT SHARE DB", "permission granted, here is contentUri: " + contentUri.toString());
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("application/octet-stream");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "blaaa subject");
String to[] = { email };
shareIntent.putExtra(Intent.EXTRA_EMAIL, to);
shareIntent.putExtra(Intent.EXTRA_TEXT, "blah blah message");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
startActivityForResult(Intent.createChooser(shareIntent, "Send mail..."), 1252);
//revoke permisions
this.revokeUriPermission(contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
答案 0 :(得分:0)
看到这个答案
Android Utility to send sqlite db to server
你可以通过多种方式做到这一点。我说将其发布到网络服务是最简单的。如果您只能使用电子邮件,那么我会对其进行压缩和编码并将其附加到电子邮件中,但这听起来很痛苦。
答案 1 :(得分:0)
解决。 FileProvider无法访问数据库目录。必须先将db文件复制到files目录,然后再附加它。请在此处查看解决方案:Android: FileProvider "Failed to find configured root"