如需请求用户选择文档或照片等文件并向您的应用返回文件引用,请使用 ACTION_GET_CONTENT
操作并指定所需 MIME 类型。 向您的应用返回的文件引用对 Activity 的当前生命周期而言是瞬态引用,因此如果您想稍后进行访问,就必须导入可在稍后读取的副本。用户还可利用此 Intent 在进程中创建新文件(例如,用户可以不选择现有照片,而是用相机拍摄新照片)。
传送至您的 onActivityResult()
方法的结果 Intent 包括的数据具有指向该文件的 URI。该 URI 可以是任何类型,如 http:
URI、file:
URI 或 content:
URI。 不过,如果您想将可选择的文件限定为可从内容提供程序 (content:
URI) 访问的文件,以及通过 openFileDescriptor()
以文件流形式提供的文件,则您应该为 Intent 添加 CATEGORY_OPENABLE
类别。
在 Android 4.3(API 级别 18)及更高版本上,您还可以通过为 Intent 添加 EXTRA_ALLOW_MULTIPLE
并将其设置为 true
,允许用户选择多个文件。然后您就可以在 getClipData()
返回的 ClipData
对象中访问每一个选定的文件。
-
操作
-
ACTION_GET_CONTENT
数据 URI 架构
- 无 MIME 类型
- 与用户应选择的文件类型对应的 MIME 类型。 Extra
-
- 一个布尔型值,声明用户是否可以一次选择多个文件。
- 一个布尔型值,声明是否返回的文件必须直接存在于设备上,而不是需要从远程服务下载。
EXTRA_ALLOW_MULTIPLE
EXTRA_LOCAL_ONLY
类别(可选)
-
-
只返回可通过
openFileDescriptor()
以文件流形式表示的“可打开”文件。
CATEGORY_OPENABLE
-
只返回可通过
用于获取照片的示例 Intent:
static final int REQUEST_IMAGE_GET = 1;
public void selectImage() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_IMAGE_GET);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) {
Bitmap thumbnail = data.getParcelable("data");
Uri fullPhotoUri = data.getData();
// Do work with photo saved at fullPhotoUri
...
}
}
用于返回照片的示例 Intent 过滤器:
<activity ...>
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<data android:type="image/*" />
<category android:name="android.intent.category.DEFAULT" />
<!-- The OPENABLE category declares that the returned file is accessible
from a content provider that supports OpenableColumns
and ContentResolver.openFileDescriptor() -->
<category android:name="android.intent.category.OPENABLE" />
</intent-filter>
</activity>