关于android的activity中camera预览问题,涉及activity生命周期
迷茫
迷茫 2017-04-17 11:23:19
[Android讨论组]

请教一个问题

我一个activity
打开了摄像头,并启动了预览,在onpause中调用了release摄像头后,再回到activity,在onresume中调用了重新打开摄像头及预览,预览就失效了,但其他代码还正常,跟踪代码,执行了surfaceCreated和surfaceChanged,里面有mCamera.startPreview();

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
高洛峰

activity pause过后恢复我们以前是这样做的,Camera对象需要重新生成

在onPause的时候,调用如下方法(已经删除其他跟我们项目相关的逻辑代码)

/**
 * 停止显示相机画面</br>
 * 若设置了录制器,会自动关闭录制器
 */
public void stopPreview() {
    synchronized (mCameraLock) {
        if (mCamera != null) {
            mCamera.setPreviewCallback(null);
            mCamera.stopPreview();
            mCamera.release();
            mCamera = null;
        }         
    }
}

然后在onResume时,重新获得Camera对象(通过Camera.open()),
再重新设置previewCallback,SurfaceHolder,Parameters等,最后startPreview

这里可以提醒一下LZ,
打开摄像头的时间可能会很长,勿在主线程直接打开,否则会有概率出ANR
摄像头根据设备的不同可能在打开时经常会抛各种异常,记得try,catch

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号