在Android中发送Sqlite数据库作为电子邮件附件
我有一个简单的应用程序,我用它发送附件 我已经成功地从SD卡发送了一个文本文件(尽管我无法使用在Android中发送Sqlite数据库作为电子邮件附件,android,sqlite,email-attachments,Android,Sqlite,Email Attachments,我有一个简单的应用程序,我用它发送附件 我已经成功地从SD卡发送了一个文本文件(尽管我无法使用openFileOutput(fileName,0))在应用程序专用区域中创建的文件来处理该文件),但我现在想发送一个数据库 通过调试,我可以验证数据库是否存在,并且在其唯一的表中有一个条目。我要发送的代码如下所示: gmailButton = (Button) findViewById(R.id.button); gmailButton.setOnClickListener(new OnClickLi
openFileOutput(fileName,0)
)在应用程序专用区域中创建的文件来处理该文件),但我现在想发送一个数据库
通过调试,我可以验证数据库是否存在,并且在其唯一的表中有一个条目。我要发送的代码如下所示:
gmailButton = (Button) findViewById(R.id.button);
gmailButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "subject line");
sendIntent.putExtra(Intent.EXTRA_TEXT,"Body of email");
Uri uri = Uri.fromFile(getDatabasePath("TEST_DB"));
//uri = file:///data/data/com.gmailspike/databases/TEST_DB
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.setType("application/octet-stream");
startActivity(Intent.createChooser(sendIntent,"Email:"));
}
})
)
但是,当电子邮件客户端打开附件时,附件大小为0字节,如果我触摸打开附件,客户端会说找不到文件
有什么想法吗?我不确定mime类型是否正确,或者它是否重要 至于MIME类型,它当然很重要,因为应用程序必须支持它(显式或通过通配符)才能响应意图,并通过
createChooser
找到它
例如,我认为Gmail接受带有*/*
操作的MIME类型,但我不知道其他邮件客户端
编辑:至于权限,请查看Intent类中的
标志\u GRANT\u READ\u URI\u permission
标志:我记得在尝试发送带有图像附件的电子邮件,链接到存储在apps私有数据文件夹中的文件时,也遇到过类似的问题。附件不见了
使用邮件意图打开一个新应用程序来处理邮件创建。因此,您需要编写一个允许其他应用程序访问您的私有数据的应用程序
或者先将内容复制到公共区域,然后将其添加到邮件意图中(这仅适用于大多数手机都有SD卡的情况)。在那种情况下,可能会用到这个词
希望这有助于找到解决方案。感谢您提供有关mime类型的有趣信息。我尝试了许可标志,但它不起作用。我想我会先把文件复制到外部存储器。啊。。。我还没有深入研究内容提供商,因此将首先复制到外部存储。请看下面的so答案,了解有关复制DB文件、发送电子邮件和删除复制的DB文件的非常好的示例: