赞
踩
- package com.lipeng.fileprovider;
-
- import android.content.Context;
- import android.net.Uri;
- import android.text.TextUtils;
-
- import androidx.core.content.FileProvider;
-
- import java.io.File;
-
- /**
- * 2023/4/20
- * @author : lp
- */
- public class MyFileProvider extends FileProvider {
-
- /**
- * 使用FileProvider
- *
- * 1.
- * 因为是ContextProvider的子类,所以需要在AndroidManifest.xml中注册:
- * <provider
- * android:authorities="${applicationId}.fileprovider"
- * android:name="androidx.core.content.FileProvider"
- * android:exported="false"
- * android:grantUriPermissions="true">
- * <meta-data
- * android:name="android.support.FILE_PROVIDER_PATHS"
- * android:resource="@xml/conversation_file_paths">
- * </meta-data>
- * </provider>
- * authorities:可以自定义,也可以使用(${applicationId}.fileprovider)的形式
- * name:即当前类,继承FileProvider的实现类,也可以如示例在清单文件中配置系统的FileProvider,
- * 在使用的地方直接使用系统的FileProvider,根据使用情况的多样性决定即可
- * android:exported="false" 只能为false
- * android:grantUriPermissions="true" 是否允许授予权限
- * android:resource="@xml/conversation_file_paths" 见2
- *
- * 2.
- * 因为需要对真实的文件路径进行映射,所以需要编写一个xml文档,用于描述可使用的文件目录,以及通过name去映射该文件夹目录
- * <resources>
- * <paths>
- * <root-path
- * name="root"
- * path="" />
- *
- * <files-path
- * name="files"
- * path="" />
- *
- * <cache-path
- * name="cache"
- * path="" />
- *
- * <external-path
- * name="external"
- * path="" />
- *
- * <external-files-path
- * name="external_file_path"
- * path="" />
- * <external-cache-path
- * name="external_cache_path"
- * path="" />
- * </paths>
- * </resources>
- * root-path/files-path/cache-path... 为对应的真实的系统文件路径
- * name:将真实的文件路径映射成的值
- *
- * 3.
- * 获取通过FileProvider获取映射的Uri, 见函数getUribyProvider()
- *
- * 4.
- * 授予Uri权限,有2种方式
- *
- * 一种是,通过Intent传递uri给第三方应用使用,通过addFlags的形式
- * Intent intent = new Intent(Intent.ACTION_SENDTO);
- * intent.setData(uri);
- * intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
- *
- * 另一种是,通过grantUriPermission(),指定包名的形式,
- * context.grantUriPermission("使用该uri的程序包名", providerUri,
- * Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
- * revokeUriPermission(): 删除指定uri授予给其他进程的临时权限
- *
- */
-
- private static final String PROVIDER_AUTHORITIES = ".fileprovider";
- public Uri getUribyProvider(Context context, String filePath) {
- if (TextUtils.isEmpty(filePath)) {
- return null;
- }
- File temFile = new File(filePath);
- if (!temFile.exists()) {
- return null;
- }
- return getUriForFile(context,
- context.getPackageName() + PROVIDER_AUTHORITIES, temFile);
- }
- }
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。