整理android呼叫系統相機的方法及遇到的問題

2021-06-16 23:13:54 字數 2659 閱讀 9664

在專案中遇到需要呼叫系統相機的功能點,整理方法如下

1.拍照完成之後直接存

intent intent = new intent(mediastore.action_image_capture);

intent.putextra("crop", "true");// crop=true 有這句才能出來最後的裁剪頁面.

intent.putextra("aspectx", 5); // 這兩項為裁剪框的比例.

intent.putextra("aspecty", 4);

intent.putextra("output", uri.fromfile(new file("sdcard/1.jpg")));//輸出位址

intent.putextra("outputformat", "jpeg");//返回格式

startactivityforresult(intent, request_camera);

獲取直接在onactivityforresult中

bitmapfactory.decodefile(filename, opts);
2.拍照完成後讀取intent中的資料,在onactivityforresult中

uri uri = data.getdata();

contentresolver cr = this.getcontentresolver();

try catch (filenotfoundexception e)

但是這種方法在測試過程中,海信手機會報空指標異常,也許是相機處理機制的問題,我沒有深究

3.最後一種是當前專案正用到的方法 目前在各種手機上使用正常

file.mkdirs();// 建立資料夾

final string filename = image_path + name;

logutils.i("fangdd", "onresult path:" + filename);

try catch (filenotfoundexception e) finally

try catch (ioexception e)

}這種方式是將資源取出之後存入檔案,並不在activity中直接儲存bitmap 僅在用到時載入 避免記憶體溢位

下面記錄一下開發中遇到的問題,說道這裡不得不吐槽一下三星的相機,呼叫之後系統會呼叫ondestroy導致activity被銷毀重建,原因是系統呼叫了一次橫豎屏切換,解決方法如下

方法二:上面的方法可行,但並不是解決問題的根本辦法,後來通過檢視發現在呼叫相機時,activity從豎屏切換到了橫屏,在橫豎屏切換導致了activity重新裝載,找到根本原因後,在activity中通過

另外關於壓縮的**也一併貼在這裡以便以後檢視

private bitmap getdiskbitmap(string pathstring)  else if (length / (1024 * 1024) >= 1)  else if (length / (1024 * 512) >= 1)  else if (length / (1024 * 256) >= 1)  else 

bitmap = bitmapfactory.decodefile(pathstring, opt);

// ///

// if(pathstring.contains("floor/imgs")) else

*/if (orientation != 0) else

// }

// //

}} catch (exception e)

if (bmaprotate != null)

return bitmap;

} /**

* * @param path

* 絕對路徑

* @return degree旋轉的角度

*/public static int readpicturedegree(string path)

} catch (ioexception e)

return degree;

}

Android呼叫系統前置相機拍照

intent intent new intent mediastore.action image capture intent.putextra camerasensortype 2 呼叫前置攝像頭 測試,發現不正確,並不能直接開啟前置攝像頭,開啟的是上次使用的攝像頭。正確方法是 intent in...

Android呼叫系統相簿和系統相機拍照

呼叫系統相機拍照 intent new intent mediastore.action image capture startactivityforresult intent,result camara image result camara image activity的標誌。自已定義 呼叫系統...

呼叫系統相機

button image button findviewbyid r.id.image 呼叫照相機 image.setonclicklistener new onclicklistener suppresswarnings deprecation suppresslint sdcardpath ov...