2013-06-03 4 views
0

Я реализовал съемку и обрезал ее в своем приложении. Обычно он работает отлично. Но проблема возникает на устройствах с галереей Cooliris. После того, как изображение будет снято, появляется сообщение «Галерея (процесс com.cooliris.media) неожиданно остановилось». К сожалению, у меня нет такого устройства, и я не могу его проверить. Но у меня есть стек из журнала сбоев.Возьмите и обрезайте изображение с помощью Cooliris

E/AndroidRuntime(20624): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(20624): at com.cooliris.media.CropImage.loadBitmap(CropImage.java:460) 
E/AndroidRuntime(20624): at com.cooliris.media.CropImage.onCreate(CropImage.java:443) 
E/AndroidRuntime(20624): at android.app.Activity.performCreate(Activity.java:4465) 
E/AndroidRuntime(20624): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) 
E/AndroidRuntime(20624): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932) 
E/AndroidRuntime(20624): ... 11 more 

код я использую, чтобы сделать фото:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
imageCaptureUri = Uri.fromFile(getTempImageFile()); 
intent.putExtra("return-data", true); 
startActivityForResult(intent, INTENT_PICK_FROM_CAMERA); 

Код для обрезки изображения (в onActivityResult для этого намерения):

Intent intent = new Intent("com.android.camera.action.CROP"); 
intent.addCategory("android.intent.category.DEFAULT"); 
intent.addCategory("android.intent.category.ALTERNATIVE"); 
intent.addCategory("android.intent.category.SELECTED_ALTERNATIVE"); 
intent.setDataAndType(data.getData(), "image/jpeg"); 
intent.putExtra("outputX", CROPPED_IMAGE_X); 
intent.putExtra("outputY", CROPPED_IMAGE_Y); 
intent.putExtra("aspectX", 1); 
intent.putExtra("aspectY", 1); 
intent.putExtra("scale", true); 
intent.putExtra("return-data", true); 
startActivityForResult(intent, INTENT_CROP_FROM_CAMERA); 

Похоже data.getData () является нулевым, но я не уверен. Кто-нибудь знает, что может быть проблемой и как ее исправить?

ответ

0

У меня была проблема с функцией растениеводстве (только Cooliris СМИ), тоже:

Cooliris СМИ исключение:

E/AndroidRuntime(4439): java.lang.RuntimeException: 
Unable to start activity ComponentInfo{com.cooliris.media/com.cooliris.media.CropImage}: java.lang.NullPointerException 
... 
E/AndroidRuntime(4439): Caused by: java.lang.NullPointerException 
at com.cooliris.media.CropImage.onCreate(CropImage.java:276) 

Я решил эту проблему, давая ACTION_IMAGE_CAPTURE Намерение правильный выходной файл. Это работает для меня:

private static Uri tempFileUri = null; 
... 
String fileName = "myImg.tmp"; 
ContentValues values = new ContentValues(); 
values.put(MediaStore.Images.Media.TITLE, fileName); 
values.put(MediaStore.Images.Media.DESCRIPTION, "test description"); 
tempFileUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
if (tempFileUri != null) { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempFileUri); 
    ... 
    startActivityForResult(takePictureIntent, IntentConstants.INTENT_REQUEST_CODE_TAKE_PHOTO); 
} 

Я не использую intent.putExtra("return-data", true); больше, потому что некоторые устройства не возвращают данные (а некоторые только маленькие изображения - это, кажется, что каждое устройство действует иначе). Возможно, именно по этой причине происходит исключение NullPointer в среде cooliris (данные, отправленные в cooliris, были пустыми). Это действительно раздражает, что Cooliris просто падает ...

код, чтобы обрезать изображение (в onActivityResult для этого намерения):

Uri picUri = null; 
if (intent.getData() != null) { 
    picUri = intent.getData(); 
} else { 
    picUri = tempFileUri; 
} 
Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
cropIntent.setDataAndType(picUri, "image/*"); 
cropIntent.putExtra("crop", "true"); 
cropIntent.putExtra("aspectX", 1); 
cropIntent.putExtra("aspectY", 1); 
cropIntent.putExtra("outputX", 56); 
cropIntent.putExtra("outputY", 56); 
cropIntent.putExtra("return-data", true); 
startActivityForResult(cropIntent, INTENT_REQUEST_CODE_CROP_PHOTO); 
Смежные вопросы