使用电子邮件意图

时间:2017-02-20 18:29:39

标签: android android-intent android-file

好的,我已经过了一段时间了,而且我没有得到它。多个链接中没有任何建议解决了这个问题。

我已成功设置我的应用程序以发送文件。目前,我正在尝试使用我的应用程序打开这些文件。

当我点击收到的电子邮件中的文件时,我的活动就会打开。

接下来我需要做的是将文件本地保存在我的应用程序使用的外部存储文件夹中。

因此,当您单击文件并且intent过滤器打开正确的活动时,您接下来要做什么来访问该文件?

意图过滤器:

<intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="*/*" />
            <data android:pathPattern=".*\\.gmgt" />
        </intent-filter>

的活动:

public class ActFileReceiver extends Activity {

private TextView label;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_file_receiver);

    label = (TextView) findViewById(R.id.lblFileRecieverText);


}

}

用于发送文件的意图:

public void emailFile(File file) {
    Uri fileURI = Uri.fromFile(file);
    Intent mailIntent = new Intent(android.content.Intent.ACTION_SEND);
    mailIntent.setType("messsage/vnd.com.boardmonkey.TABLETop.gamefile");
    mailIntent.putExtra(Intent.EXTRA_SUBJECT, "TABLETop game file: " + file.getName());
    mailIntent.putExtra(Intent.EXTRA_STREAM, fileURI);
    startActivity(Intent.createChooser(mailIntent, "Send Mail With..."));
}

1 个答案:

答案 0 :(得分:0)

您希望支持ACTION_VIEW。如果你看the documentation for ACTION_VIEW,你会发现:

  

输入:getData()是从中检索数据的URI。

此处,“输入”指的是从您呼叫startActivity()的人发送的数据,即具有用户选择的活动的数据。并且,Intent操作文档中引用的方法引用了Intent本身。

因此,请致电getIntent()以检索用于创建活动的Intent,并在其上调用getData()以获取您所在内容的Uri应该查看。

现在你开始遇到问题了。具体来说,您正在尝试使用android:pathPattern。您的使用有两个问题:

  1. You cannot use android:pathPattern without also specifying android:scheme and android:host

  2. 这是2017年,很少有东西使用文件扩展名了。特别是,大多数内容都是通过Uri方案与content方案共享,content Uri不太可能有文件扩展名。

  3. 使用android:pathPattern的唯一半有效方法是将自己限制为file方案(通过android:scheme),然后确定您的应用将与您的应用稳定地互操作随着时间的推移减少应用数量。