使用电子邮件意图
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
。您的使用有两个问题:
You cannot use android:pathPattern
without also specifying android:scheme
and android:host
.
现在是 2017 年,很少有东西使用文件扩展名了。特别是,大多数内容是通过 Uri
值与 content
方案共享的,并且 content
Uri
不太可能具有文件扩展名。
使用 android:pathPattern
的唯一 semi-effective 方法是将自己限制在 file
方案(通过 android:scheme
),然后接受您的应用程序将随着时间的推移,与数量稳步减少的应用程序进行互操作。
好的,我已经研究了一段时间了,但我还是不明白。 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
。您的使用有两个问题:
You cannot use
android:pathPattern
without also specifyingandroid:scheme
andandroid:host
.现在是 2017 年,很少有东西使用文件扩展名了。特别是,大多数内容是通过
Uri
值与content
方案共享的,并且content
Uri
不太可能具有文件扩展名。
使用 android:pathPattern
的唯一 semi-effective 方法是将自己限制在 file
方案(通过 android:scheme
),然后接受您的应用程序将随着时间的推移,与数量稳步减少的应用程序进行互操作。