本篇只针对API19及以上
访问外部存储的权限
- API19开始,应用可以管路在它外部储存的特定包名目录,而不需要声明读写权限,比如,包明为com.mimminaya.permission的应用,可以自由访问外部储存卡上的Android/data/com.minminaya.permission/[]目录
外部存储对数据提供的保护较少,所以系统不应该存储敏感数据在外部存储上。
特别地,配置和log文件应该存储在内部存储中,这样它们可以被有效地保护。
Environment API的目录
//外置内存卡根,为避免污染用户根命名控件,不推荐使用,加文件夹
Log.e(TAG, "/storage/181C-0A4B路径:" + Environment.getExternalStorageDirectory().toString());
Log.e(TAG, "/storage/181C-0A4B/Download路径:" + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString());
Log.e(TAG, "/data路径:" + Environment.getDataDirectory().toString());
Log.e(TAG, "/cache路径:" + Environment.getDownloadCacheDirectory().toString());
Log.e(TAG, "/system路径:" + Environment.getRootDirectory().toString());
Context下的目录
这些目录推荐存放一些内部数据,且不需要声明权限(包名目录下)
外置卡上的
Log.e(TAG, "/storage/181C-0A4B/Android/data/com.minminaya.permission1/cache路径:" + getExternalCacheDir());
Log.e(TAG, "/storage/181C-0A4B/Android/data/com.minminaya.permission1/files/Download路径:" + getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS));
任何应用私有的文件的应该被放置在 Context.getExternalFilesDir返回的目录下,在应用被卸载的时候,系统会清理的就是这个目录。
内存上的
Log.e(TAG, "内存上的{包名/files}路径:" +getFilesDir());
Log.e(TAG, "内存上的{包名/cache}路径:" +getCacheDir());
注意
华为手机如果在存储里面设置默认存储为外置卡,则内置外置内存卡目录挂载将变换