问题描述
我有以下代码来处理存储权限:
private void getGalleryPermission() {
Log.d(TAG,"getGalleryPermission: checking permissions.");
String[] permissions = { WRITE_STORAGE,READ_STORAGE };
if (ContextCompat.checkSelfPermission(requireActivity(),WRITE_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG,"getGalleryPermission: write storage is granted.");
if (ContextCompat.checkSelfPermission(requireActivity(),READ_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG,"getGalleryPermission: read storage is granted.");
setupRecyclerView();
}
else {
Log.d(TAG,"getGalleryPermission: asking to read the storage.");
requestPermissions(permissions,REQUEST_STORAGE_PERMISSION_RESULT);
}
}
else {
Log.d(TAG,"getGalleryPermission: asking to write the storage.");
requestPermissions(permissions,REQUEST_STORAGE_PERMISSION_RESULT);
}
}
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
Log.d(TAG,"onRequestPermissionsResult: request code " + requestCode);
if (requestCode == REQUEST_STORAGE_PERMISSION_RESULT) {
Log.d(TAG,"onRequestPermissionsResult: request code is correct.");
if (grantResults.length > 0) {
for (int grantResult : grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(requireActivity(),"Don't have permission to access the Gallery !",Toast.LENGTH_SHORT).show();
break;
}
}
// Setup the gallery once the permissions are granted
setupRecyclerView();
}
}
}
我正在数部手机上测试此代码,并且运行良好。但是,在我的Huawei上,listFiles()
方法在null
上返回/storage/emulated/0 directory
。
我已经在电话设置+日志中签入,并且授予了存储权限(就像在其他工作电话上一样)。
在授予权限的情况下,什么可以阻止读取文件?
在某些手机上,/ storage / emulated / 0是否不是获取所有图库文件的正确目录?
PS:我已经从手机中的“文件”应用程序中检查了目录,但该目录不是空的(DCIM等在里面)。
谢谢
解决方法
返回null
的Huawei设备是否运行Android 10?似乎对于该路径,Android从API 29开始返回null
。您可能想检查一下这个问题here。