我正在开发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)
谢谢!
答案 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;
}