之前的代码工作正常,即使现在它适用于Android 6之前的设备,但在我的Nexus 5,6.0.1中,我无法从外部存储访问数据。
显示File not Found Exception
java.io.FileNotFoundException:/ storage / emulated / 0 / Download / ******** / *****:open failed:ENOENT(没有这样的文件或目录)
为了将数据写入存储,我要求运行时存储权限,那部分似乎没问题。
答案 0 :(得分:1)
由于您的代码在Pre-Marshmallow设备中运行良好,看起来您还没有在应用中添加运行时权限。
从Android M
开始,您需要在运行时请求权限,如文档中所述:
从Android 6.0(API级别23)开始,用户在应用运行时向应用授予权限,而不是在安装应用时授予权限。
详细了解Android here
中在运行时请求权限答案 1 :(得分:1)
在主要活动的onCreate()
方法中进行此操作:
if (currentapiVersion > android.os.Build.VERSION_CODES.LOLLIPOP){
// Do something for lollipop and above versions
checkPermission();
if (!checkPermission()) {
requestPermission();
}
}
这段代码onCreate()
:
private boolean checkPermission(){
int result = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION);
if (result == PackageManager.PERMISSION_GRANTED){
return true;
} else {
return false;
}
}
private void requestPermission(){
ActivityCompat.requestPermissions(activity,new String[]{
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CALL_PHONE},PERMISSION_REQUEST_CODE
);
}
此代码将检查版本是否高于Lollipop OS。如果是这样,那么它将在加载应用时向用户请求许可。
希望它会对你有所帮助。测试。工作正常。