android 应用组件[通用 Intent---检索特定类型的文件] 十一

如需请求用户选择文档或照片等文件并向您的应用返回文件引用,请使用 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
一个布尔型值,声明是否返回的文件必须直接存在于设备上,而不是需要从远程服务下载。
类别(可选)
CATEGORY_OPENABLE
只返回可通过  openFileDescriptor() 以文件流形式表示的“可打开”文件。

用于获取照片的示例 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>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值