2010-02-24 113 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; 

}

尝试。