Android 7.0 Provider适配

79 阅读1分钟

1. AndroidMainfest.xml

定义provider标签

<!--        此处的.provider.ShowroomProvider是继承自androidx.core.content.FileProvider,也可以直接改为androidx.core.content.FileProvider,通过继承的好处是可以指定另外的provider-->
<provider android:authorities="${applicationId}.provider"
          android:name=".provider.ShowroomProvider"
          android:grantUriPermissions="true">
    <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_path"/>
</provider>

2. @xml/file_path.xml

<?xml version="1.0" encoding="utf-8"?>
<paths>
<!--此处的根标签表示,可以访问外部私有file目录   .表示目录下的所有文件-->
    <external-files-path
            name="external-files-path"
            path="."/>
</paths>

3.Activity中使用

// 如果SDK的版本>=Android N,使用FileProvider获取Uri,否则直接使用Uri.fromFile(file)方法 
val uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
    FileProvider.getUriForFile(
        activity,
        activity.packageName + ".provider",
        file
    )
else
    Uri.fromFile(file)

4. @xml/file_path.xml中二级根标签的可选值与含义

标签名称对应Kotlin/java 方法作用
files-pathContext.getFilesDir()读取内置存储区中files文件夹下的指定目录或者文件
cache-pathContext.getCacheDir()读取内置存储区中cache文件夹下指定目录或者文件
external-pathEnvironment.getExternalStorageDirectory()读取外部存储根目录下指定目录或者文件
external-files-pathContext#getExternalFilesDir(String) Context.getExternalFilesDir(null)读取外部存储区私有目录下files目录下指定目录或者文件
external-cache-pathContext.getExternalCacheDir()读取外部存储区私有目录下cache目录下指定目录或文件
external-media-pathContext.getExternalMediaDirs()读取外部存储区私有目录下media目录下指定目录或文件