即使已授予权限,也无法从外部存储读取文件

时间:2018-06-25 17:17:28

标签: android android-external-storage

我正在使用Android Studio和虚拟设备(x86上的Nexus 5 S)。

出于测试目的,我试图从外部存储读取二进制文件。

当我使用设备的“ adb shell”连接到设备时,可以在/ storage / emulated / 0中找到该文件

在我的测试活动中,我只是这样:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final String filename = "basse-normandie.map";

    final File file = new File(Environment.getExternalStorageDirectory()
                      .getAbsolutePath(), filename);
    Log.i("FileTests", "file is '"+file.getAbsolutePath()+"'");
    Log.i("FileTests", "file exists: "+file.exists());
    file.setReadable(true);
    Log.i("FileTests", "app can read file: "+file.canRead());

}

以及我放入的清单

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

我想WRITE_EXTERNAL_STORAGE没什么用。

在logcat窗口中,我得到了:

06-25 19:03:46.648 5107-5107/org.airforce_one.filetests I/FileTests: file is '/storage/emulated/0/basse-normandie.map'
    file exists: true
    app can read file: false

我找不到我在做什么错...我在网上浏览的每个页面都告诉我提供权限,但是没有其他提示...

2 个答案:

答案 0 :(得分:0)

删除该行中的最终

 File file = new File(Environment.getExternalStorageDirectory()
                  .getAbsolutePath(), filename);

然后改变

file.setReadable(true, false); //the second parameter is specify if the permission is for OwnerOnly

答案 1 :(得分:0)

.map文件与我完全一样

file.setReadable(true, false);

解决了。