我有一个简单的应用程序,我用它来发送附件。
我已经设法从SD卡发送文本文件(虽然我无法使用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字节,如果我触摸打开附件,则客户端说无法找到该文件。
有什么想法吗?我不确定哑剧类型是否正确,或者即使它很重要!
答案 0 :(得分:4)
我记得在尝试发送带有图片附件的电子邮件时,遇到了类似的问题,链接到存储在apps私有数据文件夹中的文件。附件不见了。
使用邮件意图打开新应用程序来处理邮件创建。因此,您需要编写Content Provider以允许其他应用程序访问您的私人数据。
或者首先将内容复制到公共区域并从那里将其添加到邮件意图中(这仅适用于大多数手机都有SD卡的情况)。在这种情况下可以使用External Storage.getExternalStorageDirectory()。
希望这有助于找到解决方案。
答案 1 :(得分:1)
至于MIME类型,它肯定很重要,因为应用程序必须支持它(显式地或通过通配符)来响应意图并通过createChooser
找到。
我认为Gmail实例接受*/*
作为MIME类型ACTION_SEND
,但我不了解其他邮件客户端。
修改:至于权限,请查看Intent类中的FLAG_GRANT_READ_URI_PERMISSION
标记:http://developer.android.com/reference/android/content/Intent.html#FLAG_GRANT_READ_URI_PERMISSION