2016-10-15 47 views
1

我從我的應用程序通過intent與參數MediaStore.EXTRA_OUTPUT.Camera開啓相機活動開,但是當我backpress不點擊圖像我的應用程序crashes.I通過類似的問題去了,看見相機意圖如果使用MediaStore.EXTRA_OUTPUT,則返回null。那麼如何檢查圖像是否被點擊? 這裏是代碼:
安卓相機意圖處理backpress

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
Uri camCapfileUri = Uri.fromFile(new File(camCaptureImageName)); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, camCapfileUri); 
activity.startActivityForResult(intent, reqCode); 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    //Changes camera on backpressed with data null checked 
    if (requestCode == REQUEST_CAMERA) { 
     onCaptureImageResult(); 
    } else if (requestCode == PICK_FROM_GALLERY && data.getData() != null) { 
     onSelectFromGalleryResult(data); 
    } 
} 

,當我檢查(數據!= NULL)的攝像頭,可以在一些手機和崩潰其他mobiles.So我如何在這種情況下處理backpress運作良好。

+0

檢查Activity.RESULT_CANCELED或Activity.RESULT_OK ...在後退按鈕的情況下,您將獲得Activity.RESULT_CANCELED –

+0

爲什麼在開始使用數據或文件之前沒有檢查onActivityResult中的RESULT_Ok?如果你沒有捕獲或什麼也沒做相機的意圖總是返回以外,它保證將返回RESULT_OK之前開始提取數據之外的Result_cancel。 –

回答

0

當您設置一個MediaStore.EXTRA_OUTPUT標誌,則data總是爲空(在Android> = 5.0,我認爲)。

來實現它的正確方法是保持其作爲價值的標誌MediaStore.EXTRA_OUTPUT密鑰的文件的一個實例。

然後點擊圖片,然後得到一個RESULT_OK後,檢查文件是否存在。

請注意:File對象可能是nullonActivityResult()之內。這是因爲活動從相機活動返回時被重新創建。爲了解決這個問題,你需要保存內onSaveInstanceState()文件到outState束的路徑,並在onRestoreInstanceState()重新初始化。

0

我不知道如果我正確理解你的問題,但你可以檢查,如果結果是正確的。我修改了一下你的代碼。

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
Uri camCapfileUri = Uri.fromFile(new File(camCaptureImageName)); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, camCapfileUri); 
activity.startActivityForResult(intent, reqCode); 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    //Changes camera on backpressed with data null checked 
    // if user press back result will not be RESULT_OK 
    if(resultCode == Activity.RESULT_OK){ 
     if (requestCode == REQUEST_CAMERA) { 
     onCaptureImageResult(); 
     } else if (requestCode == PICK_FROM_GALLERY && data.getData() != null) { 
     onSelectFromGalleryResult(data); 
     } 
    } 
} 

我希望這能幫到你。