android 4.1中的摄像头崩溃(API级别16)
我的应用程序具有摄像头功能。它在所有Android版本中都能正常工作,但现在当我在S3中测试时,它崩溃了。错误指向这一行:android 4.1中的摄像头崩溃(API级别16),android,camera,android-4.2-jelly-bean,android-2.3-gingerbread,Android,Camera,Android 4.2 Jelly Bean,Android 2.3 Gingerbread,我的应用程序具有摄像头功能。它在所有Android版本中都能正常工作,但现在当我在S3中测试时,它崩溃了。错误指向这一行: Parameters parameters = mCamera.getParameters(); 在: 有人能提供一个解决方案吗?日志如下: ?:??: W/?(?): java.lang.NullPointerException ?:??: W/?(?): at com.stpl.snapshun.camera.CameraActivity.surfaceChang
Parameters parameters = mCamera.getParameters();
在:
有人能提供一个解决方案吗?日志如下:
?:??: W/?(?): java.lang.NullPointerException
?:??: W/?(?): at com.stpl.snapshun.camera.CameraActivity.surfaceChanged(CameraActivity.java:313)
?:??: W/?(?): at android.view.SurfaceView.updateWindow(SurfaceView.java:554)
?:??: W/?(?): at android.view.SurfaceView.access$000(SurfaceView.java:81)
?:??: W/?(?): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:169)
?:??: W/?(?): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:671)
?:??: W/?(?): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1818)
?:??: W/?(?): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
?:??: W/?(?): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
?:??: W/?(?): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
?:??: W/?(?): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
?:??: W/?(?): at android.view.Choreographer.doFrame(Choreographer.java:525)
?:??: W/?(?): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
?:??: W/?(?): at android.os.Handler.handleCallback(Handler.java:615)
?:??: W/?(?): at android.os.Handler.dispatchMessage(Handler.java:92)
?:??: W/?(?): at android.os.Looper.loop(Looper.java:137)
?:??: W/?(?): at android.app.ActivityThread.main(ActivityThread.java:4745)
?:??: W/?(?): at java.lang.reflect.Method.invokeNative(Native Method)
?:??: W/?(?): at java.lang.reflect.Method.invoke(Method.java:511)
?:??: W/?(?): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
?:??: W/?(?): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
?:??: W/?(?): at dalvik.system.NativeStart.main(Native Method)
我这里的问题是试图访问相机参数返回null
提前感谢我在S3中的摄像头活动也遇到了同样的问题,并得到了修复。这对我有好处 我不确定。如果我没弄错的话,您正在使用自己的代码来使用surfaceview进行拍照 因此,对于更高版本的android(
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
特别是对于S3(捕获的图像大小可以达到4MB),如果你上传到web上,最好调整大小并上传。由于连续捕获和上传的图片超过2-3张,您会再次收到内存警告和崩溃。这可能是由于文件太大,请尝试重新调整图像大小,并检查其是否工作 重新调整图像大小的步骤 试试这个
public static Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height,
matrix, false);
return resizedBitmap;
}
Lincy这是摄像头视图类的代码
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height)
{
if(mPreviewRunning )
{
mCamera.stopPreview();
}
// Store width and height
mWidth = width;
mHeight = height;
// Set camera parameters
Camera.Parameters p = mCamera.getParameters();
mCamera.setParameters(p);
if(android.os.Build.VERSION.SDK_INT >= 8)
{ // If API >= 8 -> rotate display...
mCamera.setDisplayOrientation(90);
}
try
{
mCamera.setPreviewDisplay(holder);
} catch(IOException e)
{
e.printStackTrace();
}
mCamera.startPreview();
mPreviewRunning = true;
}
public void surfaceCreated(final SurfaceHolder holder)
{
try {
mCamera = Camera.open();
mCamera.setPreviewDisplay(holder);
} catch (IOException e)
{
mCamera.release();
mCamera = null;
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder)
{
if(mCamera != null)
{
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.setPreviewCallback(null);
mPreviewRunning = false;
mCamera.release();
mCamera = null;
}
}
还有一件事,您是否使用
SurfaceHolder,回拨
很抱歉更新太晚。问题是设备没有自动对焦。因此,您需要首先检查设备是否具有自动对焦功能:boolean focus=getPackageManager().hasSystemFeature(“android.hardware.camera.autofocus”) 德语,看看这是否有助于你理解:
mCamera.autoFocus(myAutoFocusCallback);
/**
* If camera having autofocus which is calling here
*/
AutoFocusCallback myAutoFocusCallback = new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean start, Camera arg1) {
if (focus) {
if (start) {
if (mPreviewRunning) {
mCamera.takePicture(myShutterCallback, mPicture,
mPicture);
}
} else {
btnCamera.setEnabled(true);
side.setEnabled(true);
showToast("Could not get focus. Try again.");
}
} else {
if (mPreviewRunning) {
mCamera.takePicture(myShutterCallback, mPicture, mPicture);
}
}
}
};
ShutterCallback myShutterCallback = new ShutterCallback() {
@Override
public void onShutter() {
showToast("Picture taken!");
}
};
你能提供你的
CameraActivity
来源吗?很明显,mCamera
为空,但很难确定原因。抱歉,无法获取您的信息?又撞车了?不,我需要修改一下相机的外观,所以这对我不起作用问题是,当应用程序在Android 4.1中运行时,返回的摄像头实例为空。我刚刚用Android OS 4.1.1在galaxy NoteII上测试了我的摄像头虚拟应用程序。摄像头活动正常。没有崩溃。一定是其他原因导致应用程序崩溃。请输入该代码我你用过和我在这里用过的相同的程序吗?谢谢!是的,我已经实现了SurfaceHolder.Callback…将尝试这段代码…你能把整个类都放进去吗?事实上,我需要看看你在surfaceCreated和surfaceDestroyed中做了什么…可能是我出错了我编辑了代码并添加了surfaceCreated和SurfaceDestroye我面临着与你在本线程中描述的相同的问题,但我不太清楚如何处理focus var的值,如果是真的,我应该做些特别的事吗?
mCamera.autoFocus(myAutoFocusCallback);
/**
* If camera having autofocus which is calling here
*/
AutoFocusCallback myAutoFocusCallback = new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean start, Camera arg1) {
if (focus) {
if (start) {
if (mPreviewRunning) {
mCamera.takePicture(myShutterCallback, mPicture,
mPicture);
}
} else {
btnCamera.setEnabled(true);
side.setEnabled(true);
showToast("Could not get focus. Try again.");
}
} else {
if (mPreviewRunning) {
mCamera.takePicture(myShutterCallback, mPicture, mPicture);
}
}
}
};
ShutterCallback myShutterCallback = new ShutterCallback() {
@Override
public void onShutter() {
showToast("Picture taken!");
}
};