@ANDROID学习
#自学安卓
今天按照书上的教程写一个分贝测试仪,要在SD卡根目录下创建一个文件,怎么都不成功,后来发现是Android访问外部存储的权限问题,网上很多教程说在Androidmainfest 中
申请权限
<uses-permission android:name=“android.permission.MOUNT_UNMOUNT_FILESYSTEMS”
<uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE”
<uses-permission android:name=“android.permission.READ_EXTERNAL_STORAGE”
还有添加
android:requestLegacyExternalStorage=“true”
但我试了这种方法还是不管用,最后找到这位老兄的教程,解决了问题,特意记录一下,方便和我遇到一样问题的同学查看。
老兄的教程在这里:
我也把代码在这里贴一下:
public static String getSDPath(Context context) {
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);// 判断sd卡是否存在
if (sdCardExist) {
if (Build.VERSION.SDK_INT>=29){
//Android10之后
sdDir = context.getExternalFilesDir(null);
}else {
sdDir = Environment.getExternalStorageDirectory();// 获取SD卡根目录
}
} else {
sdDir = Environment.getRootDirectory();// 获取跟目录
}
return sdDir.toString();
}
这样使用:
try {
mSampleDir=getSDPath(this); //获取手机内存路径
Log.d("SD_Dir", mSampleDir);
//用IM+系统当前时间为文件名建立.amr的文件,文件路径为mSampleDir。
mAudiofile = File.createTempFile("IM" + System.currentTimeMillis(), ".amr", new File(mSampleDir));
Log.d("SD_AbsolutePath", mAudiofile.getAbsolutePath());
} catch (IOException e) {
Log.e("SD_Err", "sdcard access error");
}
这种方法不需要申请外部存储的权限,如图:
再次感谢老兄,折腾了一上午。