camera2-Android Camera2的使用到底是哪里错了?

问题描述

Android Camera2的使用到底是哪里错了?

代码如下:

public class CameraTwoActivity extends AppCompatActivity implements TextureView.SurfaceTextureListener {

@Bind(R.id.textureview)android.view.TextureView mPreviewView;private Handler mHandler;private HandlerThread mThreadHandler;private Size mPreviewSize=null;private CaptureRequest.Builder mPreviewBuilder;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.camera_activity);    ButterKnife.bind(this);    mThreadHandler = new HandlerThread(""CAMERA2"");    mThreadHandler.start();    mHandler = new Handler(mThreadHandler.getLooper());    mPreviewView.setSurfaceTextureListener(this);}@TargetApi(Build.VERSION_CODES.LOLLIPOP)public void onSurfaceTextureAvailable(SurfaceTexture surface int width int height) {    try {        //获得CameraManager        CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);        //获得属性        CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(""0"");        //支持的STREAM CONFIGURATION        StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);        //显示的size        mPreviewSize = map.getOutputSizes(SurfaceTexture.class)[0];        //打开相机        if (ActivityCompat.checkSelfPermission(this Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {            // TODO: Consider calling            //    ActivityCompat#requestPermissions            // here to request the missing permissions and then overriding            //   public void onRequestPermissionsResult(int requestCode String[] permissions            //                                          int[] grantResults)            // to handle the case where the user grants the permission. See the documentation            // for ActivityCompat#requestPermissions for more details.            return;        }        cameraManager.openCamera(""0"" mCameraDeviceStateCallback mHandler);    } catch (Exception e) {        e.printStackTrace();    }}@Overridepublic void onSurfaceTextureSizeChanged(SurfaceTexture surface int width int height) {}@Overridepublic boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {    return false;}//TextureView.SurfaceTextureListener@Overridepublic void onSurfaceTextureUpdated(SurfaceTexture surface) {}private CameraDevice.StateCallback mCameraDeviceStateCallback = new CameraDevice.StateCallback() {    @Override    public void onOpened(CameraDevice camera) {        try {            startPreview(camera);        } catch (CameraAccessException e) {            e.printStackTrace();        }    }    @Override    public void onDisconnected(CameraDevice camera) {    }    @Override    public void onError(CameraDevice camera int error) {    }};//开始预览,主要是camera.createCaptureSession这段代码很重要,创建会话private void startPreview(CameraDevice camera) throws CameraAccessException {    SurfaceTexture texture = mPreviewView.getSurfaceTexture();    texture.setDefaultBufferSize(mPreviewSize.getWidth() mPreviewSize.getHeight());    Surface surface = new Surface(texture);    Log.i(getClass().getName()1111"");    try {        mPreviewBuilder = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);    } catch (CameraAccessException e) {        Log.i(getClass().getName()2222"");        e.printStackTrace();    }    Log.i(getClass().getName()3333"");    mPreviewBuilder.addTarget(surface);    camera.createCaptureSession(Arrays.asList(surface) mSessionStateCallback mHandler);}private CameraCaptureSession.StateCallback mSessionStateCallback = new CameraCaptureSession.StateCallback() {    @Override    public void onConfigured(CameraCaptureSession session) {        try {            updatePreview(session);        } catch (CameraAccessException e) {            e.printStackTrace();        }    }    @Override    public void onConfigureFailed(CameraCaptureSession session) {    }};private void updatePreview(CameraCaptureSession session) throws CameraAccessException {    session.setRepeatingRequest(mPreviewBuilder.build() null mHandler);}

}

解决方案

As the log said you are trying to get width from a Null object.
texture.setDefaultBufferSize(mPreviewSize.getWidth() mPreviewSize.getHeight());
mPreviewSize = null

解决方案二:
空指针错误 你可以在打印的logcat信息的下面 有一个 你的类的代码行 提示 会 定位到 哪一行的

解决方案三:
楼主,问题解决了没?这个camera2我也不会用。
你的代码里有一句。mThreadHandler = new HandlerThread(""CAMERA2"");
我看到SDK->Samples->media->Camera2Basic里用的是 new HandlerThread(""CameraBackground"")

时间: 2024-10-27 16:52:49

camera2-Android Camera2的使用到底是哪里错了?的相关文章

二维码-android Camera2(CameraManager) 如何调用zbar扫描?

问题描述 android Camera2(CameraManager) 如何调用zbar扫描? 原因:在**nexus5x**测试二维码扫描时,发现**预览画面是上下颠倒**的,用的是旧的camera API,改成Camera2(CameraManager)后,预览画面是正常了,但是不知道如何调用zbar了. 且,在 旧Camera中,尝试调整预览画面角度无效. 解决方案 我现在也遇到同样的问题,楼主怎么解决的

Android camera2 判断相机功能是否可控的实例

Android Camera2 可调功能适配 首先获取到设备等级: Float hardwareLevel = mCameraCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); LEGACY < LIMITED < FULL < LEVEL_3. 越靠右边权限越大 •INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY = 2 •INFO_SUPPORTED_HARDWAR

[译] 大战 RxJava2 和 Java8 Stream [ Android RxJava2 ] (这到底是什么) 第四部分

本文讲的是[译] 大战 RxJava2 和 Java8 Stream [ Android RxJava2 ] (这到底是什么) 第四部分, 原文地址:War against Learning Curve of RxJava2 + Java8 Stream [ Android RxJava2 ] ( What the hell is this ) Part4 原文作者:Hafiz Waleed Hussain 译文出自:掘金翻译计划 译者: Boiler Yao 校对者: Vivienmm.Git

观察者模式 – 响应式编程 [Android RxJava2](这到底是什么):第一部分

本文讲的是观察者模式 – 响应式编程 [Android RxJava2](这到底是什么):第一部分, 哦,我们又过了一天,是时候来学习新东西让这一天变得很棒了. 大家好,希望你们做的更好.今天我打算开始一个关于 Rx Java2 的新系列,但是首先的 2-3 篇文章是关于响应式编程的.希望我们能够学到新的东西,然后一起消除所有的困惑. 动机: 说实话,我一开始学习 Rx 的时候遇到了许多问题.我尝试了许多教程.书籍,但是最后我都无法在我的应用里面使用 Rx.许多教程让我感到很困惑,就像有些部分说

拉模式和推模式,命令式和响应式 – 响应式编程 [Android RxJava2](这到底是什么):第二部分

本文讲的是拉模式和推模式,命令式和响应式 – 响应式编程 [Android RxJava2](这到底是什么):第二部分, 太棒了,我们又来到新的一天.这一次,我们要学一些新的东西让今天变得有意思起来. 大家好,希望你们过得不错.这是我们 Rx Java 安卓系列的第二部分.在这篇文章里,我打算解决下一个关于推模式(Push)和拉模式(Pull)或者推模式(Push)与迭代模式,以及命令式和响应式之间的困惑. 动机: 动机跟我分享第一部分的是一样的.当我看到有 hasNext(),next()方法

Android 5.0.2到底更新了啥?

Android 5.0.2到底更新了啥?Google今天放出了Android 5.0.2,从版本号上就可以看出其升级幅度之小,肯定是仅仅修复一些细节而已.目前,官方的更新日志尚未放出,不过有开发者进行了总结,列出了它的每一处细节改进.果然和猜测的一样,这是一次单独针对Nexus 7 2012的小更新,包括六处细节改进,其中Wi-Fi版本四处.GSM版本两处,包括更新预 编译内核.四线程模拟SD卡.改进交互式载入等等,可以提升CPU运行效率,保持较高性能.fstrim的改进也值得关注.它用来维护S

listview-ListView 的问题,按照书上例子,仿写了一个,结果出问题了,请大家看看到底哪里出错了啊

问题描述 ListView 的问题,按照书上例子,仿写了一个,结果出问题了,请大家看看到底哪里出错了啊 先是有两个布局文件,一个是关于ListView控件的,另一个是我自己定的线性布局,实现的是一个字符旁边先是一个图样. xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent&

数据结构-我的程序和正确额差不多,到底那里出错了?

问题描述 我的程序和正确额差不多,到底那里出错了? 用于判断字符串是否是对称的 #include #include #include #include #define Max 30 typedef struct{ char data[Max]; int top; }sqstack; void Initstack(sqstack *&l) { l=(sqstack *)malloc(sizeof(sqstack)); l->top=-1; } void Destorystack(sqstack

线程-Android Studio跑程序的时候报错了 求大神指教!!

问题描述 Android Studio跑程序的时候报错了 求大神指教!! 02-29 21:27:52.770 13264-13270/com.example.cms.yibujiazai E/jdwp: Failed sending reply to debugger: Broken pipe 02-29 21:27:52.820 13264-13264/com.example.cms.yibujiazai W/dalvikvm: VFY: unable to find class refer