8.0出来后一直没有用过,最近的几个项目集中性的反馈了几个8.0手机的bug,直到今天公司弄来了一台8.0的手机,终于可以真机调试一下。发现问题很简单,就是创建文件夹失败,mkdir()返回false。
可是我明明申请了权限的,也做了6.0以上系统动态申请权限的判断。
if (Build.VERSION.SDK_INT >= 23 && checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}
弄了半天发现原来8.0系统如果要创建文件夹的话,必须申请写的权限,本来读写是一体的,申请了读的权限,写的权限也就申请了。不知道8.0系统修改了这个机制是出于什么目的······,知道原因就好解决了,将动态申请权限的代码改为下面的即可:
if (Build.VERSION.SDK_INT >= 23 && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}