FileStorge相关的几个intent

本文介绍了在Android应用中如何使用ACTION_GET_CONTENT和ACTION_OPEN_DOCUMENT等Intent Action来获取和打开不同类型的文件,包括如何指定文件类型、允许多选以及创建新文件。

1,取回一个特定类型的file

如果想发请求请用户选择一个文件(例如文档或者图片),然后再把文件引用返回来,可以使用ACTION_GET_CONTENT。这个action一定要加type。

返回的文件引用是临时的,只在这个activity的当前生命周期有用。

这个intent也允许用户创建一个新的file返回,例如不是选择一个现有的图片,而是新拍一张图片。


用户选择的文件的Uri会返回到onActivityResult,这个Uri可以是任意类型例如http:,content:,file:

如果要限制为存在content provider并且可以用openFileDescriptor()打开,那就加上category: CATEGORY_OPENABLE。

在4.3及其以后的版本可以在extra中设置key:EXTRA_ALLOW_MULTIPLE为true这样就允许用户同时选择多个file。这些文件通过intent的getClipData()拿到。

另外还有一个extra key:EXTRA_LOCAL_ONLY,说明返回的文件是不是必须是本地文件,而不需从remote service获取。


2,打开某个类型的文件

4.4之后可以使用ACTION_OPEN_DOCUMENT加上MIME type来请求打开一个其他app管理下的文件。

使用ACTION_CREATE_DOCUMENT允许用户在其他app管理的存储区域创建一个文件,然后你的app向里面写入内容。

Uri同样会返回到onActivityResult,和上面的不同,这个Uri只能是content:的,和上面的相比你的app对这个返回的Uri有长期的读权限甚至写权限。

使用的时候必须写明MIME type和category: CATEGORY_OPENABLE,如果有多种MIME type可以设置一个数组给EXTRA_MIME_TYPE。


另外EXTRA里面多出一个EXTRA_TITLE,用于和ACTION_CREATE_DOCUMENT一起使用,声明创建的文件的名字。


以上说的只是客户端app发的请求,要想做到可以打开其他app的文件还需要其他app作特定的实现,这次先不讲,待续。









在 Android 中,`Intent.ACTION_VIEW` 是一个标准的 Intent 动作常量,用于通知系统启动一个 Activity 来查看某些数据。通常用于展示用户可读的内容,例如打开网页、查看图片、播放视频等。它属于 Intent 的标准动作之一,与其他动作如 `Intent.ACTION_EDIT` 或 `Intent.ACTION_SEND` 不同,`ACTION_VIEW` 更侧重于“只读”操作[^1]。 ### 使用示例 #### 示例 1:使用 `Intent.ACTION_VIEW` 打开网页 ```java Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.example.com")); startActivity(intent); ``` 上述代码会触发系统中能够处理网页查看的 Activity,例如默认浏览器或用户选择的浏览器应用。 #### 示例 2:使用 `Intent.ACTION_VIEW` 查看图片 ```java Uri imageUri = Uri.parse("content://media/internal/images/media/1"); // 假设图片的 URI Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(imageUri, "image/*"); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivity(intent); ``` 此代码将启动一个能够查看图片的应用,例如图库应用或第三方图片查看器。 ### 与其他 Intent 常量的对比 | Intent 常量 | 用途 | 示例 | |-------------|------|------| | `Intent.ACTION_VIEW` | 查看数据,通常用于只读操作 | 打开网页、查看图片 | | `Intent.ACTION_EDIT` | 编辑数据 | 启动编辑器应用,编辑特定文件 | | `Intent.ACTION_SEND` | 发送数据给其他应用 | 分享文本、图片到社交平台 | | `Intent.ACTION_DIAL` | 拨打电话界面 | 启动拨号界面并显示特定号码 | | `Intent.ACTION_WEB_SEARCH` | 执行网页搜索 | 启动搜索引擎应用进行搜索 | 不同 Intent 常量触发的系统行为和应用场景各不相同。`ACTION_VIEW` 主要用于展示数据,而 `ACTION_EDIT` 更倾向于允许用户修改数据,`ACTION_SEND` 则用于跨应用的数据共享。 ### 适用场景与匹配规则 使用 `Intent.ACTION_VIEW` 时,系统会根据 `Intent-filter` 匹配合适的组件。例如,在 AndroidManifest.xml 中定义的某个 Activity 可以通过以下方式声明其支持处理网页查看: ```xml <activity android:name=".WebViewerActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http://" android:host="*" /> </intent-filter> </activity> ``` 如果多个组件满足 Intent 请求,系统会弹出一个选择对话框,让用户决定使用哪个应用来处理请求[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值