Android:尽管有权限,但无法列出 /storage/emulated/0 个文件
Android : unable to list /storage/emulated/0 files despite permissions
我有以下代码来处理存储权限:
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();
}
}
}
我正在我的几个 phone 上测试这段代码,它运行良好。但是,在我的华为上, listFiles()
方法 returns null
在 /storage/emulated/0 directory
.
我已经在日志中检查了 phone 设置 +,并且授予了存储权限(就像在其他正在工作的 phone 上一样)。
尽管授予了权限,什么可以阻止文件被读取?
在某些 phone 上,/storage/emulated/0 是否可能不是获取所有图库文件的正确目标目录?
PS : 我已经检查了我 phone 中文件应用程序的目录,它不是空的(DCIM 等......在里面)。
谢谢
是returnsnull
运行Android10的华为设备?似乎对于那条路径 Android returns null
自 API 29。你可能想检查这个问题 here.
我有以下代码来处理存储权限:
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();
}
}
}
我正在我的几个 phone 上测试这段代码,它运行良好。但是,在我的华为上, listFiles()
方法 returns null
在 /storage/emulated/0 directory
.
我已经在日志中检查了 phone 设置 +,并且授予了存储权限(就像在其他正在工作的 phone 上一样)。
尽管授予了权限,什么可以阻止文件被读取?
在某些 phone 上,/storage/emulated/0 是否可能不是获取所有图库文件的正确目标目录?
PS : 我已经检查了我 phone 中文件应用程序的目录,它不是空的(DCIM 等......在里面)。
谢谢
是returnsnull
运行Android10的华为设备?似乎对于那条路径 Android returns null
自 API 29。你可能想检查这个问题 here.