我正在使用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
我找不到我在做什么错...我在网上浏览的每个页面都告诉我提供权限,但是没有其他提示...
答案 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);
解决了。