2013-06-03 156 views
0

我已經實現了拍照並在我的應用中裁剪。通常它是完美的。但問題出現在Cooliris圖庫的設備上。拍攝圖像後出現消息「Gallery(process 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);了,因爲有些設備不返回數據(有的只有小圖片 - 似乎每個設備的行爲不同)。也許這就是爲什麼在cooliris媒體中發生NullPointer異常(發送給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);