2010-02-24 144 views
-1

在我的應用程序中,相機預覽在potrait和橫向模式下均可正常工作。沒有發生崩潰事件,但用戶抱怨當使用相同的事件時發生崩潰。這有什麼問題?請任何人都幫我解決這個問題相機預覽問題?

+0

在任何特定設備上?你是否設法從任何用戶那裏獲得日誌? – 2010-02-24 12:02:52

+0

好的,我會嘗試。用戶正在重新報道圖像在potrait模式下崩潰。他們正在獲得運行時異常 – harish 2010-02-25 11:45:51

回答

1

請確保您要求支持的相機預覽分辨率。

請參閱Camera.Parameters.getSupportedPreviewSizes瞭解有關如何查詢支持的分辨率以及請求Camera.Parameters.setPreviewSize支持的分辨率的詳細信息。

0

也許你在你的活動固定的佈局,像這樣來禁用旋轉重新啓動相機:

public void onCreate(Bundle savedInstanceState) { 
    ... 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} 
0

問題是,該設備是無法設置預覽參數。 您可以使用以下代碼設置可在任何設備上工作的預覽參數。

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 



if (isPreviewRunning) { 
    camera.stopPreview(); 
} 
try{ 
Camera.Parameters p = camera.getParameters(); 
if(p!=null){ 
List<Size> sizes = p.getSupportedPreviewSizes(); 
Size optimalSize = getOptimalPreviewSize(sizes, w, h); 
p.setPreviewSize(optimalSize.width, optimalSize.height); 
camera.setParameters(p); 

camera.setPreviewDisplay(holder);; 
camera.startPreview(); 

} 
} catch (IOException e) { 
    // TODO Auto-generated catch block 


    e.printStackTrace(); 
} 

isPreviewRunning = true; 
} 
private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) { 
// TODO Auto-generated method stub 
final double ASPECT_TOLERANCE = 0.05; 
double targetRatio = (double) w/h; 
if (sizes == null) return null; 

Size optimalSize = null; 
double minDiff = Double.MAX_VALUE; 

int targetHeight = h; 

// Try to find an size match aspect ratio and size 
for (Size size : sizes) { 
double ratio = (double) size.width/size.height; 
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; 
if (Math.abs(size.height - targetHeight) < minDiff) { 
optimalSize = size; 
minDiff = Math.abs(size.height - targetHeight); 
} 
} 

// Cannot find the one match the aspect ratio, ignore the requirement 
if (optimalSize == null) { 
minDiff = Double.MAX_VALUE; 
for (Size size : sizes) { 
if (Math.abs(size.height - targetHeight) < minDiff) { 
optimalSize = size; 
minDiff = Math.abs(size.height - targetHeight); 
} 
} 
} 
return optimalSize; 

}

嘗試。