【发布时间】:2018-12-08 09:59:12
【问题描述】:
在我的 mibox 4k 更新到 android Oreo 后,该应用程序无法运行
代码查找外部存储
private String[] getUsbStoragePaths()
{
List<String> result = new ArrayList<>();
File storageDir = new File("/storage");
if(storageDir.isDirectory()) {
File[] subDir = storageDir.listFiles();
for(File dir : subDir) {
if(dir.canRead()) {
result.add(dir.getAbsolutePath());
}
}
}
return result.toArray(new String[0]);
}
private List<File> getSubDirs(String path) {
List<File> result = new ArrayList<>();
File root = new File(path);
if (root.exists() && root.canRead()) {
File[] subDirs = root.listFiles(); ->>>>>> alway null
if (subDirs !=null)
{
for(File dir: subDirs)
{
if (dir.isDirectory() && dir.canRead())
{
result.add(dir);
}
}
}
}
return result;
}
我的 USB 存储有子文件夹
根
----子目录1
----子目录2
----子目录3
----文件1
应用中的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
并在运行时请求权限
private void requestStoragePermission() {
if (!hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) ||
!hasPermission(, Manifest.permission.READ_EXTERNAL_STORAGE)) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
}
private boolean hasPermission(final String permission) {
return PackageManager.PERMISSION_GRANTED == getApplicationContext().getPackageManager().checkPermission(
permission, getApplicationContext().getPackageName());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Other things
requestStoragePermission();
}
getSubDirs 方法的结果为空, 文件[] subDirs = root.listFiles(); ->>>>>> 始终为空
【问题讨论】:
-
文件[] subDirs = root.listFiles(); ->>>>>> 始终为空。 'listFiles' 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。如果此抽象路径名不表示目录,则此方法返回 null。这个根文件不是我猜的目录,请看一下。 1.developer.android.com/reference/java/io/File#listFiles() 2.stackoverflow.com/questions/30062035/…
-
@Ankita-user3449434 这个根文件是目录,路径是“/storage/16 digit”
-
它适用于 getSubDirs("/storage/emulated/0/"),但不适用于 getSubDirs("/storage/39EB...../")
-
Android Oreo 在 Mibox 4k 设备上存在许多错误。现在它已更改为测试版
标签: java android file android-tv