【问题标题】:Sending Sqlite database as email attachment in Android在 Android 中将 Sqlite 数据库作为电子邮件附件发送
【发布时间】:2011-11-02 07:01:36
【问题描述】:

我有一个简单的应用程序,我用它来发送附件。

我已经成功地从 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 字节,如果我触摸打开附件,客户端会说找不到文件。

有什么想法吗?我不确定 mime 类型是否正确,或者即使它是否重要!

【问题讨论】:

标签: android sqlite email-attachments


【解决方案1】:

我记得在尝试发送带有图像附件的电子邮件时也遇到过这样的问题,链接到存储在应用程序私人数据文件夹中的文件。只是缺少附件。

使用邮件意图打开一个新应用程序来处理邮件创建。因此,您要么需要写一个Content Provider 以允许其他应用程序访问您的私人数据。

或者先将内容复制到公共区域,然后从那里将其添加到邮件意图中(这仅适用于大多数手机都存在 SD 卡的情况)。 External Storage.getExternalStorageDirectory() 可以在这种情况下使用。

希望这有助于找到解决方案。

【讨论】:

  • 啊……我还没有深入研究内容提供商,所以将复制到外部存储以供初学者使用。
【解决方案2】:

至于 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

【讨论】:

  • 感谢有趣的信息 re mime 类型。我尝试了权限标志,但没有用。我想我会先将文件复制到外部存储。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2015-09-09
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多