2016-06-22 1 views
1

나는 이미지를 캡처하고 이미지의 경로를 얻기 위해 android.provider.MediaStore.ACTION_IMAGE_CAPTURE 액션으로 인 텐트를 사용합니다. 경로를 얻은 후 비트 맵으로 디코딩합니다. 비트 맵 디코드 파일 반환 null

Bitmap photoBitmap = BitmapFactory.decodeFile(currentPhotoPath); 

모든

디바이스 1에 잘 작동, 이미지 경로에 대한 로그는 다음과 같다 :
/storage/emulated/0/Pictures/QPOS/IMG_20160622_110127_1473532607.jpg 

은 그 때 나는 새 장치 전화 1 디바이스에 응용 프로그램을 실행합니다. 내가 캡처 이미지 이후 가지고 이미지 경로 :

/storage/emulated/0/Pictures/QPOS/IMG_20160622_105436_2068195440.jpg 

이 정상 본다. 그러나 디코드 메서드는이 줄에 null 비트 맵을 반환합니다.

Bitmap photoBitmap = BitmapFactory.decodeFile(currentPhotoPath); 

두 장치간에 다른 점을 알고 있습니다. 왜 메소드 디코드 파일에 null 비트 맵이 있는지 설명 할 수 있습니까? 이 문제를 해결하는 방법은 무엇입니까? 감사.

업데이트 : 대화 상자에서 빌드 후

private File setUpPhotoFile() throws IOException { 
     File f = createImageFile(); 
     currentPhotoPath = f.getAbsolutePath(); 
     return f; 
    } 

    private File createImageFile() throws IOException { 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = JPEG_FILE_PREFIX + timeStamp + "_"; 
     File albumF = getAlbumDir(); 
     File imageF = File.createTempFile(imageFileName, JPEG_FILE_SUFFIX, albumF); 
     return imageF; 
    } 

    private File getAlbumDir() { 
     File storageDir = null; 
     if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { 
      //storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), getString(R.string.app_name)); 
      storageDir = new File(
        getExternalFilesDir(Environment.DIRECTORY_PICTURES), getString(R.string.app_name)); 
      if (storageDir != null) { 
       if (!storageDir.mkdirs()) { 
        if (!storageDir.exists()) { 
         Log.d("CameraSample", "failed to create directory"); 
         return null; 
        } 
       } 
      } 
     } else { 
      Log.d(getString(R.string.app_name), "External storage is not mounted READ/WRITE."); 
     } 


     return storageDir; 
    } 

및 부여 권한 :이 이미지의 경로를 생성하는 코드입니다

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); 
      } 
     } 
    } 

: 나는이 방법으로 API (23)에 대한 요청 권한을 추가 , 나는 똑같은 문제가있다.

+0

해결책을 찾으십니까? 나는 SOF에 대해 다른 주제를 읽었고 당신은 나와 똑같은 것을 가지고 있습니다. 모든 다른 주제에는 "유사한 문제"가 있지만 결국 해당 문제는 해당 솔루션이 적용되지 않으며 중복 된 것으로 표시된 이유는 확실하지 않습니다. 아니면 좋은 걸 놓친 것일까 요? – Laurent

답변

0

그것은 알파 채널의 문제처럼 보인다, 그래서 당신은 알파 보존 비트 맵에 대한 형식을 사용한다 :

체크 코드 아래를 :

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

같은 결과 – CauCuKien

+0

목록 장치 1 여기 장치 2 PLS – Vickyexpert

+0

장치 1 모두에 대한 API 레벨 : 안드로이드 5.1, 장치 2 – CauCuKien

0

당신의 디바이스 1의 안드로이드 SDK 수 있음 및 Device2의 Android sdk == 23 READ_EXTERNAL_STORAGE 권한이 Android Sdk 23 (런타임 필요시)에 따라 관리되는지 확인하시기 바랍니다.

+0

어쩌면 그 이유는 내가 확인하고 곧 다시 피드하자. – CauCuKien

+0

개인 부울 mayRequestPermission() { if (Build.VERSION.SDK_INT Andr

+0

질문을 업데이트했습니다. 감사 – CauCuKien

관련 문제