我有错误使用android打开前置摄像头

时间:2012-10-11 09:50:35

标签: android camera

我正在开发Android相机应用程序,我希望绿色屏幕色度键效果捕获图像。我用我的代码使用了http://code.google.com/p/chroma-key-project/downloads/list这个色度键项目。

我正在使用带有前置摄像头而非后置摄像头的平板电脑。我也使用了前置摄像头的许可

 <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.front" />

仍然显示从preview.java页面到此行的错误空指针异常。 camera.setPreviewDisplay(holder); //&lt; 9&gt;为什么?

检查色度键项目中给定链接的preview.java页面。请指示。

我得到的这种错误。

10-11 15:37:36.131:W / dalvikvm(11339):threadid = 1:线程退出时未捕获异常(group = 0x409ee1f8) 10-11 15:37:36.141:E / AndroidRuntime(11339):致命异常:主要 10-11 15:37:36.141:E / AndroidRuntime(11339):java.lang.UnsupportedOperationException 10-11 15:37:36.141:E / AndroidRuntime(11339):at java.lang.Thread.stop(Thread.java:1076) 10-11 15:37:36.141:E / AndroidRuntime(11339):at java.lang.Thread.stop(Thread.java:1063) 10-11 15:37:36.141:E / AndroidRuntime(11339):at com.Activity.new2you4kids.MainClass.startCamera(MainClass.java:179) 10-11 15:37:36.141:E / AndroidRuntime(11339):at com.Activity.new2you4kids.MainClass $ 1.handleMessage(MainClass.java:61) 10-11 15:37:36.141:E / AndroidRuntime(11339):在android.os.Handler.dispatchMessage(Handler.java:99) 10-11 15:37:36.141:E / AndroidRuntime(11339):在android.os.Looper.loop(Looper.java:137) 10-11 15:37:36.141:E / AndroidRuntime(11339):在android.app.ActivityThread.main(ActivityThread.java:4424) 10-11 15:37:36.141:E / AndroidRuntime(11339):at java.lang.reflect.Method.invokeNative(Native Method) 10-11 15:37:36.141:E / AndroidRuntime(11339):at java.lang.reflect.Method.invoke(Method.java:511) 10-11 15:37:36.141:E / AndroidRuntime(11339):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784) 10-11 15:37:36.141:E / AndroidRuntime(11339):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 10-11 15:37:36.141:E / AndroidRuntime(11339):at dalvik.system.NativeStart.main(Native Method)

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为Camera.open()尝试打开默认的后置摄像头,因此它返回null,因为背面没有摄像头。

如果您尝试使用Camera.open(int)函数打开前置摄像头怎么办?

像这样:

int getFrontCameraId() {
    CameraInfo ci = new CameraInfo();
    for (int i = 0 ; i < Camera.getNumberOfCameras(); i++) {
        Camera.getCameraInfo(i, ci);
        if (ci.facing == CameraInfo.CAMERA_FACING_FRONT) return i;
    }
    return -1; // No front-facing camera found
}

得到这样的话:

int index = getFrontCameraId();
if (index == -1) error();
Camera c = Camera.open(index);

来自:How to detect if there is front camera and if there is how to reach and use front camera?

编辑:您使用的代码非常陈旧且具有各种旧功能,您遇到的崩溃是由我认为的旧线程函数(停止)引起的。

链接中的代码:

  public void startCamera() {
        setContentView(R.layout.camview);
        fGameView = null;
        fGameThread.stop();
        fGameThread=null;

根据开发者网站:

停止() 不推荐使用此方法。因为以这种方式停止线程是不安全的,并且可能使您的应用程序和VM处于不可预测的状态。

请参阅:

java.lang.UnsupportedOperationException when my splash screen starts

http://developer.android.com/reference/java/lang/Thread.html#stop()

编辑二:

将onCreateOptionsMenu代码更改为此代码,不应使用myMenu变量。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    menu.add(0, MENU_START, 0, R.string.menu_start);
    menu.add(0, MENU_SEND, 0, R.string.menu_send);
    return true;
}