呼叫 `parameters.setPreviewSize(640, 480)` 後,實際預覽解析度卻變成 `960x720` (MIUI 6) 或 `1024x576` (MIUI 5),設定完全不生效。
// 這行導致後續所有參數(含 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 容錯、最後統一套用,是相容性調試的標準流程。