问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android开发(摄像头的调用)(大神请进……)

发布网友 发布时间:2022-04-23 06:19

我来回答

5个回答

热心网友 时间:2023-10-03 10:43

找到surficeView
surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
设置它的像素为800x600
surfaceView.getHolder().setFixedSize(800,480);
//下面设置surfaceView不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
然后就是回调
surfaceView.getHolder().addCallback(newSurfaceCallback());
上面的回调类是我们自己定义的,代码如下
private class SurfaceCallback implementsSurfaceHolder.Callback{
@Override
public void surfaceCreated(SurfaceHolderholder) {
try {
camera = Camera.open();//打开硬件摄像头,这里导包得时候一定要注意是android.hardware.Camera
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);//得到窗口管理器
Display display = wm.getDefaultDisplay();//得到当前屏幕
Camera.Parameters parameters =camera.getParameters();//得到摄像头的参数
parameters.setPreviewSize(display.getWidth(),display.getHeight());//设置预览照片的大小
parameters.setPreviewFrameRate(3);//设置每秒3帧
parameters.setPictureFormat(PixelFormat.JPEG);//设置照片的格式
parameters.setJpegQuality(85);//设置照片的质量
parameters.setPictureSize(display.getHeight(),display.getWidth());//设置照片的大小,默认是和屏幕一样大
camera.setParameters(parameters);
camera.setPreviewDisplay(surfaceView.getHolder());//通过SurfaceView显示取景画面
camera.startPreview();//开始预览
isPreview = true;//设置是否预览参数为真
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}

@Override
public void surfaceChanged(SurfaceHolderholder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolderholder) {
if(camera!=null){
if(isPreview){//如果正在预览
camera.stopPreview();
camera.release();
}
}
}
}
貌似也可以用activity的生命周期来实现,具体我也不是很清楚,你去网上找找吧!

热心网友 时间:2023-10-03 10:44

打开摄像头,要 start surfaceiew,当activity执行到onStop()时,要判断,然后关闭surfaceiew。这样应该就不会导致程序force close了。或者楼主您直接把force close的log信息打出来,有log才能准确的分析问题。追问

能说具体点吗?我不知道怎么关闭,上图,我是这样关闭的……


里面的被我注释掉了,不注释的话,就会结束程序的,这个改怎么写,mCamera是Camera摄像头,我直接把摄像头关闭,这个是不是有问题 ,还望请教……

热心网友 时间:2023-10-03 10:43

找到surficeView
surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
设置它的像素为800x600
surfaceView.getHolder().setFixedSize(800,480);
//下面设置surfaceView不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
然后就是回调
surfaceView.getHolder().addCallback(newSurfaceCallback());
上面的回调类是我们自己定义的,代码如下
private class SurfaceCallback implementsSurfaceHolder.Callback{
@Override
public void surfaceCreated(SurfaceHolderholder) {
try {
camera = Camera.open();//打开硬件摄像头,这里导包得时候一定要注意是android.hardware.Camera
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);//得到窗口管理器
Display display = wm.getDefaultDisplay();//得到当前屏幕
Camera.Parameters parameters =camera.getParameters();//得到摄像头的参数
parameters.setPreviewSize(display.getWidth(),display.getHeight());//设置预览照片的大小
parameters.setPreviewFrameRate(3);//设置每秒3帧
parameters.setPictureFormat(PixelFormat.JPEG);//设置照片的格式
parameters.setJpegQuality(85);//设置照片的质量
parameters.setPictureSize(display.getHeight(),display.getWidth());//设置照片的大小,默认是和屏幕一样大
camera.setParameters(parameters);
camera.setPreviewDisplay(surfaceView.getHolder());//通过SurfaceView显示取景画面
camera.startPreview();//开始预览
isPreview = true;//设置是否预览参数为真
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}

@Override
public void surfaceChanged(SurfaceHolderholder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolderholder) {
if(camera!=null){
if(isPreview){//如果正在预览
camera.stopPreview();
camera.release();
}
}
}
}
貌似也可以用activity的生命周期来实现,具体我也不是很清楚,你去网上找找吧!

热心网友 时间:2023-10-03 10:43

打开摄像头,要 start surfaceiew,当activity执行到onStop()时,要判断,然后关闭surfaceiew。这样应该就不会导致程序force close了。或者楼主您直接把force close的log信息打出来,有log才能准确的分析问题。追问

能说具体点吗?我不知道怎么关闭,上图,我是这样关闭的……


里面的被我注释掉了,不注释的话,就会结束程序的,这个改怎么写,mCamera是Camera摄像头,我直接把摄像头关闭,这个是不是有问题 ,还望请教……

热心网友 时间:2023-10-03 10:44

可能是不当的调用camera.lock()和camera.unlock()导致的

参考Android 录制视频 Camera占用的解决方法

热心网友 时间:2023-10-03 10:45

切换先把摄像头释放掉

camera.release();
参考:
android 判断摄像头是否可用(6.0以下 )
http://www.apkbus.com/blog-822721-68450.html

热心网友 时间:2023-10-03 10:44

可能是不当的调用camera.lock()和camera.unlock()导致的

参考Android 录制视频 Camera占用的解决方法

热心网友 时间:2023-10-03 10:45

切换先把摄像头释放掉

camera.release();
参考:
android 判断摄像头是否可用(6.0以下 )
http://www.apkbus.com/blog-822721-68450.html

热心网友 时间:2023-10-03 10:45

camera.setPreviewCallback(null);
camera.stopPreview();

热心网友 时间:2023-10-03 10:45

camera.setPreviewCallback(null);
camera.stopPreview();
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
保温钉保温钉 《纯爱恋歌Ⅰ》txt全集下载 Win10实时防护无法打开怎样关闭? 网上银行添加下挂卡(猪福卡)可以交易吗? 违章显示已处理未交款 和女友闹矛盾,她说分手很多次了。今天我故意发我和前女友照片在空间并发... 我跟我男朋友分手了,我在朋友圈发了朋友送的花,还说重新开始新的恋_百... ...去送东西。他没要,他发了一个朋友圈,大家看看什么意思? 当一个人看着你发一些话在朋友圈故意气他,结果他又把你拉黑了,什么意思... 写以个作文题目为“从明天起做一个……的人” android 中实现网页调用摄像头功能?怎么实现? 为什么《dnf》玩着玩着画面就卡住不动了? 22款日产逍客油耗多少个? 为什么我家电脑玩DNF很卡屏,有时还会卡掉线 日产逍客2.0L油耗多少 为什么我WIN7运行DNF感觉画面有点卡顿 日产逍客油耗很低吗? android中怎么看usb camera的电压 dnf玩起来很卡很不流畅怎么办 东风日产的SUV逍客油耗是多少? 如何用Android手机远程开启电脑摄像头实现视频监控! 电脑玩地下城与勇士总是画面不流畅或者很迟钝、卡顿等情况怎么回事?求... 逍客平均得多少油耗百公里 为什么我玩DNF会经常卡屏的,就是说屏幕不动,还有声音。 Android开发怎么调用摄像头功能? 2010逍客油耗多少钱一公里? 我的电脑玩DNF的时候,画面不是怎么流畅,有点卡顿,这是我的电脑配置。 尼桑逍客50公里需要多少升油 市面上流行的android手机摄像头的耗电情况怎么样呢? 在最低亮度的情况下一直开启摄像头能坚持多久? 逍客油耗多少? 尼桑逍客耗油量多少??? 电脑怎么把安卓手机的摄像头转换为电脑用的摄像头?手机是佳域G2。把存储功能改为计算机摄影头在我的电 日产逍客suv油耗多少 逍客的百公里油耗大约是多少? 如何在android中后台开启摄像头默默拍照 日产逍客的油耗很高吗 日产逍客怎么样,每公里耗油多少钱? 农*贷晚存了几小时怎么办今天下午5点忘记还款了,晚上12点前才记得还上,这个算逾期吗 如何实现android手机摄像头的的自动对焦 日产的逍客2.0手动 这款车怎样? 油耗高么? 有什么手机软件可以使android系统的手机通过usb连接把手机变成电脑的摄像头? 东风日产逍客1.6L的百公里油耗是多少? 房贷晚还了几小时,算逾期吗? 逍客的260油耗是多少油 android 安防监控项目中如何获取网络中的摄像头(IpCamera)参数 房贷忘记还款了怎么办 日产逍客油耗工信部油耗6L,实际油耗真的那么低吗? 寻7寸平板电脑厂家:android 2.1以上,带3G,摄影头,电池至少能用5小时以上 肯德基10000积分是多少钱 房贷忘记还了怎么办