首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

小米 MI3 Android 4.4.4 Camera setPreviewSize 不生效?閃光燈參數導致參數設定失敗

     編輯:程式設計綜合問答

現象

呼叫 `parameters.setPreviewSize(640, 480)` 後,實際預覽解析度卻變成 `960x720` (MIUI 6) 或 `1024x576` (MIUI 5),設定完全不生效。

排查過程

  1. 檢查 `getSupportedPreviewSizes()` 確認 640x480 在支援列表中。
  2. 呼叫 `camera.setParameters(parameters)` 無異常拋出,但 `getPreviewSize()` 回傳錯誤值。
  3. 逐行註解參數設定代碼,定位到 **閃光燈模式設定** 行:
// 這行導致後續所有參數(含 PreviewSize)設定失效!
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);

根因

該裝置/ROM 的 Camera HAL 對 `FLASH_MODE_OFF` 實作有缺陷,導致 `setParameters` 內部提前返回失敗,**後續參數(包括 PreviewSize)全部不生效**,預覽退回預設解析度。

解決方案

Camera.Parameters params = camera.getParameters();
// 1. 先設定解析度
params.setPreviewSize(640, 480);
// 2. 嘗試設定閃光燈,捕獲例外不中斷流程
try {
    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
} catch (Exception e) {
    Log.w(TAG, "Set flash mode failed, ignore: " + e.getMessage());
}
// 3. 最後統一套用
camera.setParameters(params);

最佳實踐:參數設定容錯模板

public static void safeSetParameters(Camera camera, Camera.Parameters params) {
    try { camera.setParameters(params); }
    catch (RuntimeException e) {
        Log.e(TAG, "setParameters failed, retrying without flash...", e);
        // 移除可能有問題的參數重試
        params.setFlashMode(null); // 或不設定
        try { camera.setParameters(params); }
        catch (RuntimeException e2) {
            Log.e(TAG, "setParameters retry failed", e2);
        }
    }
}

總結

Android Camera `setPreviewSize` 不生效,**先查閃光燈/對焦/白平衡等參數是否導致 `setParameters` 靜默失敗**。逐行隔離、try-catch 容錯、最後統一套用,是相容性調試的標準流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved