Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android 4.1中的摄像头崩溃(API级别16)_Android_Camera_Android 4.2 Jelly Bean_Android 2.3 Gingerbread - Fatal编程技术网

android 4.1中的摄像头崩溃(API级别16)

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

我的应用程序具有摄像头功能。它在所有Android版本中都能正常工作,但现在当我在S3中测试时,它崩溃了。错误指向这一行:

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!");
        }
    };