注册自己的Activity
通过mimeType和scheme,可以将自己的Activity与特定格式的内容和协议关联起来,从而用自己的Activity去打开这些内容
mimeType指的是内容格式,比如是txt,还是doc,还是ppt等
scheme指的是协议格式,比如是file,还是http等
获得资源URI
在Activity中通过以下代码,就可以获得打开的资源对应的URI
//获得资源URI
Uri uri = getIntent().getData();
微信URI转文件路径
微信文件的URI,是通过FileProvider分享出去的,我们通过URI,可以获得实际对应的文件位置
但从Android11开始,由于系统权限管理的力度加强,微信的文件已经存放到私有目录
所以我们就算能通过URI拿到文件路径,也不能读取这个文件
只有通过ContentResolver,才能正常访问FileProvider提供的资源
//通过微信URI解析文件地址
public static String uriToFile(Context context, Uri uri) {
//获得ContentResolver,用于访问其它应用数据
ContentResolver resolver = context.getContentResolver();
//获得URI路径
String pathUri = uri.getPath().toLowerCase();
//解析微信文件路径
if (uri.toString().toLowerCase().startsWith("content://com.tencent.mm.external.fileprovider/external/")) {
String file = ProjectFile.getProjectFile("cache/" + Files.getFileName(pathUri));
InputStream is = resolver.openInputStream(uri);
OutputStream os = new FileOutputStream(file);
Streams.write(is, os);
return file;
}
return null;
}
//将输入流的数据拷贝到输出流
public static void write(InputStream is, OutputStream os) {
byte[] buffer = new byte[1024 * 1024];
while (true) {
int len = is.read(buffer);
if (len
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?