Android 自定义相机黑屏
生活随笔
收集整理的這篇文章主要介紹了
Android 自定义相机黑屏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近遇到了一個奇葩問題 ,自定義相機? ,拍照一直沒有問題? 三百年沒有動過的代碼? ,在項目上uat的時候拍照黑屏了? ,先上代碼讓大家看一下? 避免出現這個錯誤
if (mCamera == null) {mCamera = getCamera(mCameraId); if (mHolder != null) { startPreview(mCamera, mHolder); }} 在onResume方法中這么寫的一直沒有問題? 但是今天打開相機就是黑屏? ,后來發現了? 在onResume方法中給開啟相機會有一定的延遲 ,具體為什么我也不知道 ,因為我切換前后攝像頭是可以預覽的? 所以我堅信了我預覽的代碼沒有問題? ?然而,為了解決這個問題? 我把開啟相機的代碼放在了SurfaceHolder的surfaceCreated方法中
public void surfaceCreated(SurfaceHolder holder) {if (mCamera == null) {mCamera = getCamera(mCameraId); }if (mCamera == null) {ToastUtil.makeText("請檢查相機相關權限是否打開!"); }else { startPreview(mCamera, holder);}} 我以為這樣就沒有問題了? 還是自己太年輕啊正常的拍照是沒有問題了 但是 鎖屏和跳轉到別的界面再回來的時候 又是黑屏了 因為 我在onPause方法中把相機設為null 在網上查了好多資料 有的說是設置預覽大小的時候? 獲取寬高為奇數,我的不是這種問題 ,因為如果我的是這樣的問題就不會出現有預覽的界面 所以我Pass了 網上還有的人說在onResume方法中sleep一下 我嘗試延時時間縮短到50ms已經可以完全正常預覽了,而且視覺上幾乎感覺不到延遲(zxing的二維碼掃描預覽視覺上也會有略微延遲),而如果改成10ms就不行了。差不多這個時間應該是需要用來調用底層so檔的最短時間。所以最終解決辦法還需要將上述OnResume()中的開啟相機方法改成如下 if (isONe!=1){if (mCamera == null) {mCamera = getCamera(mCameraId); if (mHolder != null) {new Thread(){@Override public void run() {super.run(); try{Thread.sleep(50); }catch (Exception e){}startPreview(mCamera, mHolder); }}.start(); }} } 嘻嘻 代碼修改成這樣 拍照已經是可以了 但是你以為這樣就完成了 那就錯了? 你們太小看我家測試的能力了? 。。。。。其實這時候我心中一萬只曹尼瑪經過? 但是沒有辦法? 我只能一個測試會改變一個程序員的代碼習慣? ,因為我被我家的測試改變了? 好了廢話不多說了? 我們自測只是小心翼翼的點擊操作? 好像自己的孩子一樣 怕點壞了? 但是我家測試就把你寫的程序當作是他的天敵 使勁的操作? 不點蹦就誓不罷休? 唉 天有不測風云啊? android 這么多機型 總有一款機型會會出現問題?下面我就說一下這個特殊機型 魅族 ,當手機的拍照權限拒絕的時候? 魅族獲取的Camera不為null? ?那么這就尷尬了? 因為我判斷邏輯就是判斷Camera是否為null 上代碼
if (mCamera == null) {ToastUtil.makeText("請檢查相機相關權限是否打開!"); }else { startPreview(mCamera, holder);}因為mCamera不為null 所以走進了開啟相機 但是相機權限的關閉了 爆出了異常? 所以 我在判斷權限的位置多加了代碼? ? 代碼如下
if (mCamera == null) {ToastUtil.makeText("請檢查相機相關權限是否打開!"); }else {try{// setParameters 是針對魅族MX5。MX5通過Camera.open()拿到的Camera對象不為null Camera.Parameters mParameters = mCamera.getParameters(); mCamera.setParameters(mParameters); startPreview(mCamera, holder); }catch(Exception e) {ToastUtil.makeText("請檢查相機相關權限是否打開!"); }}
這樣就能滿足條件了? 嘻嘻完美解決了? 之前還遇到了特別的問題? 小米手機拍出的照片比一般的手機排除的照片要大? 因為之前做視頻拍攝的時候? 視頻要做壓縮? 所以在做視頻配置的時候 小米手機要做特別的處理
第一寫這么就的文章? 寫的不好? 大家多多包涵
總結
以上是生活随笔為你收集整理的Android 自定义相机黑屏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html 不间断背音乐代码,请参考不用框
- 下一篇: 青海湖:月光尽情倾洒惹人念