Android Studio - 无法解码流(权限被拒绝)
Android Studio - Unable to decode stream (Permission denied)
我有这种方法可以将我的 SD 卡中的一张图像显示到 Android 工作室:
public void showImage(){
File imgFile = new File(Environment.getExternalStorageDirectory().getPath()+PATH+"Foto.jpg");
if(imgFile.exists()){
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ivProfileImage.setImageBitmap(myBitmap);
Log.i("Image","The image exists!");
}
}
其中 ivProfileImage 是一个 ImageView,PATH 是正确的。我收到此消息:
E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/2673-1D16/ProfilePhotos/Foto.jpg: open failed: EACCES (Permission denied)
I/Image: The image exists!
我的AndroidManifest.xml有权限:
- "android.permission.READ_EXTERNAL_STORAGE"
- "android.permission.WRITE_EXTERNAL_STORAGE"
我一直在寻找答案,但没有人适合我。有什么想法吗?
提前致谢。
您必须检查运行时权限。它是 Android 6 中的新内容。Look here.
private String[] apppermissions =new String[] {
Manifest.permission.CAMERA,
Manifest.permission.CALL_PHONE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.INTERNET,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO
};
private boolean checkAndRequestPermission() {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
java.util.List<String> listPermissionsNeeded = new ArrayList<>();
for (String perm : apppermissions)
{
if (ContextCompat.checkSelfPermission(activity, perm) != PackageManager.PERMISSION_GRANTED)
{
listPermissionsNeeded.add(perm);
}
}
if (!listPermissionsNeeded.isEmpty())
{
ActivityCompat.requestPermissions(activity, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),
PERMISSION_REQUEST_CODE);
return false;
}
return true;
}
我有这种方法可以将我的 SD 卡中的一张图像显示到 Android 工作室:
public void showImage(){
File imgFile = new File(Environment.getExternalStorageDirectory().getPath()+PATH+"Foto.jpg");
if(imgFile.exists()){
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ivProfileImage.setImageBitmap(myBitmap);
Log.i("Image","The image exists!");
}
}
其中 ivProfileImage 是一个 ImageView,PATH 是正确的。我收到此消息:
E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/2673-1D16/ProfilePhotos/Foto.jpg: open failed: EACCES (Permission denied)
I/Image: The image exists!
我的AndroidManifest.xml有权限:
- "android.permission.READ_EXTERNAL_STORAGE"
- "android.permission.WRITE_EXTERNAL_STORAGE"
我一直在寻找答案,但没有人适合我。有什么想法吗?
提前致谢。
您必须检查运行时权限。它是 Android 6 中的新内容。Look here.
private String[] apppermissions =new String[] {
Manifest.permission.CAMERA,
Manifest.permission.CALL_PHONE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.INTERNET,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO
};
private boolean checkAndRequestPermission() {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
java.util.List<String> listPermissionsNeeded = new ArrayList<>();
for (String perm : apppermissions)
{
if (ContextCompat.checkSelfPermission(activity, perm) != PackageManager.PERMISSION_GRANTED)
{
listPermissionsNeeded.add(perm);
}
}
if (!listPermissionsNeeded.isEmpty())
{
ActivityCompat.requestPermissions(activity, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),
PERMISSION_REQUEST_CODE);
return false;
}
return true;
}