2010-01-10 110 views
3

我们的应用程序显示一个摄像头预览和它似乎在除了摩托罗拉Droid我们得到一个运行时异常,当我们设置相机参数的所有手机做工精细:相机预览上摩托罗拉Droid

java.lang.RuntimeException: setParameters failed 
    at android.hardware.Camera.native_setParameters(Native Method) 
    at android.hardware.Camera.setParameters(Camera.java:611) 
    at com.highwaynorth.andrometer.CameraPreviewSurfaceView.surfaceChanged(CameraPreviewSurfaceView.java:57) 
    at android.view.SurfaceView.updateWindow(SurfaceView.java:460) 
    at android.view.SurfaceView.dispatchDraw(SurfaceView.java:287) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:1525) 

这里对于surfaceChanged()的代码,主要是利用APIDemos

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
    // Now that the size is known, set up the camera parameters and begin 
    // the preview. 
    Camera.Parameters parameters = mCamera.getParameters(); 
    parameters.setPreviewSize(w, h); 
    parameters.setPictureFormat(PixelFormat.JPEG); 
    parameters.setPreviewFormat(PixelFormat.YCbCr_422_SP); 
    parameters.setPreviewFrameRate(1); 
    mCamera.setParameters(parameters); 
    mCamera.startPreview(); 

采取}

有谁知道什么是错的,我们是如何设置那些会导致摩托罗拉Droid出现异常的参数?

回答

2

我可以告诉你,你的问题是与以下两行之一:

parameters.setPreviewFormat(PixelFormat.YCbCr_422_SP); 
parameters.setPreviewFrameRate(1); 

我知道这一点,因为该代码的其余部分正是我在我的书中一些相机样品做了,他们已经在DROID上进行过测试。

您可能希望在Camera.Parameters对象上使用getSupportedPreviewFormats()getSupportedPreviewFrameRates(),以查看相关设备是否支持您寻求的格式和帧速率。请注意,这些方法对于Android 2.0来说是新手,因此他们将在DROID/Milestone(并且大概是Nexus One)上工作,但在编写本文时没有其他任何内容。如果您定位的是旧版Android API版本,则需要使用反射或某些类加载技巧才能使这些方法在Android 2.0上运行,并在旧版本上跳过。

+0

你说得对。我们将其改为与APIDemos完全匹配,并移除了对setPictureFormat(),setPreviewFormat()和setPreviewFrameRate()的调用,现在它在Droid上正常工作。感谢您的详细解答! – 2010-01-11 04:18:20

0

您应该检查可用的预览格式,以确保您可以在尽可能多的设备上运行。

它看起来像DROID支持 PixelFormat.YCbCr_422_I PixelFormat.YCbCr_420_SP

您可以使用下面的方法来获取可用的格式列表。 getSupportedPreviewFormats()

Pixel Formats

0

你可能要调查另一件事:

我遇到这个问题对于运行的Motoblur设备和更新,以2.3(特别的Droid2,DroidX和的Atrix与Verizon)。

摄像机参数都很好,但在布局/ capture.xml的ViewfinderView的背景设置为透明:

<com.google.zxing.client.android.ViewfinderView 
    android:id="@+id/viewfinder_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/transparent" 
/> 

很好,看起来是透明的,对的Motoblur的Android 2.3是不是透明的。 ..

去除

android:background="@color/transparent" 

从取景器解决我的问题。

相关问题