web 和 stackoverflow 包含几个示例,如何使用 ACTION_GET_CONTENT 意图从另一个 Android 应用程序获取文件(例如,将其用作电子邮件附件)。但是我必须实现什么样的类来创建为 ACTION_GET_CONTENT 事件提供内容的应用程序,例如我可以选择这个应用程序(例如,用于选择电子邮件附件)。
ContentProvider 是正确的解决方案吗?我必须在我的 AndroidManifest.xml 中添加什么?
web 和 stackoverflow 包含几个示例,如何使用 ACTION_GET_CONTENT 意图从另一个 Android 应用程序获取文件(例如,将其用作电子邮件附件)。但是我必须实现什么样的类来创建为 ACTION_GET_CONTENT 事件提供内容的应用程序,例如我可以选择这个应用程序(例如,用于选择电子邮件附件)。
ContentProvider 是正确的解决方案吗?我必须在我的 AndroidManifest.xml 中添加什么?
经过几个小时的网络搜索,我找到了以下解决方案。
实现一个 Activity 处理意图。在其中,使用以下或更具体的代码:
Uri resultUri = // the thing to return
Intent result = new Intent();
result.setData(resultUri);
setResult(Activity.RESULT_OK, result);
finish();
将以下内容添加到清单中:
<activity
android:name="ActivityName"
android:label="Some label" >
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.OPENABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
</activity>
从 api 级别 18 开始,传入意图也可以将 EXTRA_ALLOW_MULTIPLE 设置为 true,在这种情况下,您可以将结果发送回多个文件。为此,您需要将其设置为 ClipData:
resultIntent.setClipData(clipData)