簡體   English   中英

使用ACTION_IMAGE_CAPTURE Intent時如何正確錯誤捕獲Android相機活動

[英]How to properly error-catch Android camera activity when using the ACTION_IMAGE_CAPTURE Intent

在Android中,拍攝照片可以看到作為此基本設置完成這里

protected void dispatchTakePictureIntent(){
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {

        ...
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); 
        startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        //do stuff with the output file
    }
}

但是, 第三方相機應用程序是無法預測的,因此不能保證播放效果很好

驗證輸出/捕獲任何錯誤的正確方法是什么? 我應該在try / catch塊中包裝startActivityForResult嗎? 我應該嘗試捕獲的異常類型有哪些?應該如何處理?

我應該在try / catch塊中包裝startActivityForResult嗎?

是的,盡管這與ACTION_IMAGE_CAPTURE無關。 用戶可能無法訪問相機應用程序(例如,用戶正在共享設備上的受限配置文件下運行)。 每當您使用隱式Intent調用startActivity()startActivityForResult()時,都需要應對沒有可用應用程序的可能性。

我應該嘗試捕獲的異常類型有哪些?應該如何處理?

在您鏈接的答案中,我指出了相機應用程序中的崩潰。 您不能抓住這些,因為那不是您的應用程序。

除了ActivityNotFoundException之外,您還需要考慮Android 6.0運行時權限,因為您需要CAMERA權限才能啟動ACTION_IMAGE_CAPTURE活動。 但是,通常,這將不涉及異常處理程序。

其他驗證不是基於異常,而是基於有缺陷的結果:

  • 如果提供了EXTRA_OUTPUT ,則您指定的Uri是否有任何內容? 從理論上講,如果用戶沒有取消相機應用程序的退出,則會由於相機應用程序的錯誤而存在,但不能保證。

  • 如果有內容,則可能是圖像文件嗎? 例如,您可以將BitmapFactoryinJustDecodeBounds一起使用,以查看圖像是否真的是圖像。

  • 如果沒有內容,您是否碰巧在onActivityResult()的結果Intent中獲得了Uri 越野車相機應用可能已將圖像存儲在所需位置並提供了Uri ,即使這超出了ACTION_IMAGE_CAPTURE的規格。

  • 如果沒有內容,也沒有UrigetExtras("data")返回非null值? 在這種情況下,即使圖像質量可能不好,您至少也要有縮略圖並可以自己保存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM