Android中的FileProvider,文件系统

951 阅读1分钟

7.0适配

出于文件安全考虑,只可访问所属应用的fileProvier授权下的目录,以uri形式提供

多个FileProvider冲突

自定义继承FileProvider 指定专属的authorities
建议格式 => 主工程包名.module名.fileProvider

 <provider
            android:name=".third.my.MyFileProvider"
            android:authorities="${applicationId}.my.fileProvider"//命名不与其他冲突
            android:exported="false"
            android:grantUriPermissions="true"
            >
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"
                />
        </provider>

相关介绍:www.jianshu.com/p/3879bb6ff…

文件系统

--data/data/
    --应用私有目录(app卸载时随之删除,普通用户不可操作)
        getFilesDir()
        getCacheDir()
        Environment.getDataDirectory()
        
--Android/data/
    --外部存储的应用私有目录(app卸载时随之删除,普通用户可操作,7.0开始限制其他应用的访问)
        getExternalFilesDir()
        getExternalCacheDir()
        Environment.getExternalStorageDirectory()
        
--外部存储的公共目录(无限制)
        --Music     DIRECTORY_MUSIC
        --Pictures  DIRECTORY_PICTURES
        --Download DIRECTORY_DOWNLOADS
        --Movies    DIRECTORY_MOVIES
        Environment.getExternalStoragePublicDirectory(String type)
    
--外部存储的其他目录(通常不需要用到)
        Environment.getExternalStorageDirectory();

相关介绍:yifeng.studio/2017/04/27/…

对于设备中每一个安装的 App,系统都会在内部存储空间的 data/data 目录下以应用包名为名字自动创建与之对应的文件夹。这个文件夹用于 App 中的 WebView 缓存页面信息,SharedPreferences 和 SQLiteDatabase 持久化应用相关数据等。

考虑内部存储空间容量有限,普通用户不能直接直观地查看目录文件等其他原因,Android 在外部存储空间中也提供有特殊目录供应用存放私有文件,文件路径为: /storage/emulated/0/Android/data/app package name