나는 이미지를 캡처하고 이미지의 경로를 얻기 위해 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)에 대한 요청 권한을 추가 , 나는 똑같은 문제가있다.
해결책을 찾으십니까? 나는 SOF에 대해 다른 주제를 읽었고 당신은 나와 똑같은 것을 가지고 있습니다. 모든 다른 주제에는 "유사한 문제"가 있지만 결국 해당 문제는 해당 솔루션이 적용되지 않으며 중복 된 것으로 표시된 이유는 확실하지 않습니다. 아니면 좋은 걸 놓친 것일까 요? – Laurent