![](/img/trans.png)
[英]why the images of camera using Surface view is not same as the image i capture using Intent(ACTION_IMAGE_CAPTURE)
[英]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
是否有任何內容? 從理論上講,如果用戶沒有取消相機應用程序的退出,則會由於相機應用程序的錯誤而存在,但不能保證。
如果有內容,則可能是圖像文件嗎? 例如,您可以將BitmapFactory
與inJustDecodeBounds
一起使用,以查看圖像是否真的是圖像。
如果沒有內容,您是否碰巧在onActivityResult()
的結果Intent
中獲得了Uri
? 越野車相機應用可能已將圖像存儲在所需位置並提供了Uri
,即使這超出了ACTION_IMAGE_CAPTURE
的規格。
如果沒有內容,也沒有Uri
, getExtras("data")
返回非null
值? 在這種情況下,即使圖像質量可能不好,您至少也要有縮略圖並可以自己保存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.