Q版本:
1.在manifest 文件中添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 读取扩展存储,向扩展卡读取数据,用于读取缓存定位数据-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
2.在application 添加
android:requestLegacyExternalStorage="true"
3.在对应的activity中添加 动态获取权限
private fun applyStoragePermission () {
val permissionWrite = ContextCompat.checkSelfPermission(applicationContext, WRITE_EXTERNAL_STORAGE)
val permissionRead = ContextCompat.checkSelfPermission(applicationContext, READ_EXTERNAL_STORAGE)
if (permissionWrite != PackageManager.PERMISSION_GRANTED || permissionRead != PackageManager.PERMISSION_GRANTED) {
//Toast.makeText(this, "正在请求权限", Toast.LENGTH_SHORT).show()
//申请权限,特征码自定义为1,可在回调时进行相关判断
ActivityCompat.requestPermissions(
this@MainActivity,
arrayOf(WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE),1)
}
}
获取存储空间:Environment.getExternalStorageDirectory();
判断有sd卡存储存在或者加载
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED
/** 得到SD可用内存 **/
@SuppressLint("NewApi")
private String getSdFree(){
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
StatFs fs = new StatFs(Environment.getExternalStorageDirectory().getPath());
//Android API18之前:fs.getAvailableBlocks()*fs.getBlockSize()
return Formatter.formatFileSize(this, (fs.getAvailableBytes()));
}
return "未装载";
}
获取手机默认内置存储空间:
/** 得到系统可用内存 **/
@SuppressLint("NewApi")
private String getMemFree(){
StatFs fs = new StatFs(Environment.getDataDirectory().getPath());
return Formatter.formatFileSize(this, (fs.getAvailableBytes()));
}