Android 位图解码文件返回空值

Android 位图解码文件返回空值,android,bitmap,Android,Bitmap,我使用intent和actionandroid.provider.MediaStore.action\u IMAGE\u CAPTURE来捕获图像并获取图像的路径。得到路径后,我将其解码为位图 Bitmap photoBitmap = BitmapFactory.decodeFile(currentPhotoPath); 所有这些都能在设备上正常工作1,图像路径日志如下所示: /storage/emulated/0/Pictures/QPOS/IMG_20160622_110127_14735

我使用intent和action
android.provider.MediaStore.action\u IMAGE\u CAPTURE
来捕获图像并获取图像的路径。得到路径后,我将其解码为位图

Bitmap photoBitmap = BitmapFactory.decodeFile(currentPhotoPath);
所有这些都能在设备上正常工作1,图像路径日志如下所示:

/storage/emulated/0/Pictures/QPOS/IMG_20160622_110127_1473532607.jpg
然后我将应用程序运行到一个新的设备调用设备2。 捕获图像后获得的图像路径:

/storage/emulated/0/Pictures/QPOS/IMG_20160622_105436_2068195440.jpg
看起来很正常。但是decode方法在这一行返回一个空位图

Bitmap photoBitmap = BitmapFactory.decodeFile(currentPhotoPath);
我不知道为什么两个设备之间有不同,我建立在相同的源代码。 你能解释一下为什么我得到了方法解码文件的空位图吗?如何解决这个问题?谢谢

更新: 我通过以下方法添加API 23的请求权限:

private void requestPermissions() {
        Log.d("binh", "request Permision");
        if (Build.VERSION.SDK_INT >= 23) {
            List<String> permissionRequestList = new ArrayList<>();

            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
                    != PackageManager.PERMISSION_GRANTED) {
                permissionRequestList.add(android.Manifest.permission.CAMERA);
            }

            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED) {
                permissionRequestList.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
            }

            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED) {
                permissionRequestList.add(android.Manifest.permission.READ_EXTERNAL_STORAGE);
            }

            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED) {
                permissionRequestList.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
            }

            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_PHONE_STATE)
                    != PackageManager.PERMISSION_GRANTED) {
                permissionRequestList.add(android.Manifest.permission.READ_PHONE_STATE);
            }

            if (permissionRequestList.size() > 0) {
                ActivityCompat.requestPermissions(this, permissionRequestList.toArray(new String[permissionRequestList.size()]), Constants.REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
            }
        }
    }

在构建并从dialog授予权限之后,我遇到了同样的问题

这似乎是alpha通道的问题,因此您应该为位图使用保留alpha的格式:

检查以下代码:

  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inPreferredConfig = Bitmap.Config.ARGB_8888;
  Bitmap photoBitmap = BitmapFactory.decodeFile(currentPhotoPath, options);

可能是您的设备1的Android sdk<23 和设备2的Android sdk==23
请检查读取外部存储权限是否也根据Android Sdk 23(在需要的运行时)进行管理。

在此处列出device1和device2的API级别plsdevice1:Android 5.1,device2(Android 6.0)好的,那么你需要为6.0设置外部权限检查我的回答是否有外部权限:我更新了这个问题。也许是因为这个原因,让我检查并反馈给Private boolean mayRequestPermission(){if(Build.VERSION.SDK_INT BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.ARGB_8888; Bitmap photoBitmap = BitmapFactory.decodeFile(currentPhotoPath, options);