使用电子邮件意图

using an email intent

好的,我已经研究了一段时间了,但我还是不明白。 none 多个链接中的建议已解决问题。

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

当我单击收到的电子邮件中的文件时,我的 activity 打开。

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

那么,当您单击一个文件并且 Intent 过滤器打开正确的 activity 时,您下一步要做什么来访问该文件?

意图过滤器:

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

Activity:

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..."));
}

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

Input: getData() is URI from which to retrieve data.

这里的"input"指的是调用startActivity()的人发给你的数据,用户选择的activity。而且,Intent 操作文档中引用的方法指的是 Intent 本身。

因此,调用 getIntent() 以检索用于创建 activity 的 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 不太可能具有文件扩展名。

使用 android:pathPattern 的唯一 semi-effective 方法是将自己限制在 file 方案(通过 android:scheme),然后接受您的应用程序将随着时间的推移,与数量稳步减少的应用程序进行互操作。