0
카메라를 시작하여 특정 폴더의 새 파일에 저장된 사진을 외부 저장소에 저장합니다.카메라로 캡처 한 이미지를 디코딩하는 중에 오류가 발생했습니다.
내 onActivityResult()
메서드에서 BitmapFactory.decodeFile()
을 사용하여 파일의 이미지를 디코딩하려고하면 반환되는 이미지는 null
입니다. 파일이 아직 완성되지 않았기 때문에 (즉, 카메라의 프로세스가 이미지 저장을 완료하지 못했기 때문)? 이 문제를 어떻게 해결할 수 있습니까? 여기
private void launchCamera() {
//create folder
File imagesFolder = new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
Consts.MEDIA_EXTERNAL_FOLDER);
if(!imagesFolder.exists())
imagesFolder.mkdirs();
String fileName = "pic_"+Consts.CAMERA_DATE_FORMAT.format(new Date());
File image = null;
try {
image = File.createTempFile(fileName, ".jpg", imagesFolder);
} catch(IOException e) {
Log.e(TAG, "Error creating new file.");
}
capturedImageURI = Uri.parse(image.getAbsolutePath());
//launch camera
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageURI);
startActivityForResult(intent, CAMERA_ACTION);
}
을 그리고 나는 onActivityResult()
의 이미지를 얻을 때이다 :
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case CAMERA_ACTION:
getContentResolver().notifyChange(capturedImageURI, null);
File f = new File(capturedImageURI.toString());
decodedBitmap = Helper.decodeSampledBitmapFromResource(filePath);
ImageView imageView = new ImageView(this);
imageView.setImageBitmap(decodedBitmap);
break;
}
정말 고마워요. 처음에는 "그건 사실이 아니야, 그건 uri 형식이 아니야"라고 생각하고 있었고 사실 uri.toString()의 결과는 file.getAbsolutePath()와 동일하지만 try와 for 이것이 작동하는 이유. 유일한 것은 갤러리에서 내 폴더에있는 새 사진을 볼 수 없다는 것입니다. 즉, getContentResolver(). notifyChange (capturedImageURI, null)가 작동하지 않습니다. \ –
@AlessandroRoaro :'MediaScannerConnection' 및'scanFile()'를 사용하여'MediaStore'가 여러분의 사진을 색인 할 수있게합니다. 나는 카메라 앱이 그렇게 할 것으로 기대하지만, 카메라 앱은 많이 * 있고, 타사 앱에서 호출 할 때는 아마 * 많지 않을 수도 있습니다. 또한, 파일에 대한 색인을 생성하는 데 지연이있을 수 있으며, 'ContentObserver'가 통지를 받음은 물론, 다른 작업이 장치에서 수행되는 것과 마찬가지입니다. – CommonsWare
MediaScannerConnection에 대해 알지 못했습니다. 다시 도움을 받으십시오. –