Android开发中如何调用摄像头的功能

Android hook system API —— 修改系统相机preview data 涉及二维码的应用如今很普及 阅读详情
我们要调用摄像头的拍照功能,显然
第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码
    <uses-permission android:name="android.permission.CAMERA"/>//摄像头权限
    SD卡读写权限
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
第二步,要将摄像头捕获的图像实时地显示在手机上。
我们是用SurfaceView这个视图组件来实现的,因此在main.xml中加入下列代码
<SurfaceView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/surfaceview"
 />
第三步,设置窗口的显示方式
    首先获得当前窗口 Window window = getWindow();//得到窗口
    接着设置没有标题 requestWindowFeature(Window.FEATURE_NO_TITLE);//没有标题
    接着设置全屏 window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏
    当然,我们在拍照过程中,屏幕必须一致处于高亮状态,因此接着加入下面代码
   window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//设置高亮
至此,我们将窗口的显示方式规定死了,然后才能设置窗口上显示的组件(顺序非常重要)
 setContentView(R.layout.main);
第四步,设置SurficeView显示控件的属性
   找到surficeView
   surfaceView = (SurfaceView) findViewById(R.id.surfaceview);
   设置它的像素为800x600
   surfaceView.getHolder().setFixedSize(800, 480);
  //下面设置surfaceView不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前
        surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
第五步,就是为surficeView加入回调方法(callBack)
surfaceView.getHolder().addCallback(new SurfaceCallback());
上面的回调类是我们自己定义的,代码如下
private class SurfaceCallback implements SurfaceHolder.Callback{
@Override
public void surfaceCreated(SurfaceHolder holder) {
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(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
               
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(camera!=null){
if(isPreview){//如果正在预览 
camera.stopPreview();
camera.release();
}
}
}
   
    }
第六步,我们必须对按键事件进行监听,如是拍照还是聚焦,代码如下
public boolean onKeyDown(int keyCode, KeyEvent event) {//处理按键事件
if(camera!=null&&event.getRepeatCount()==0)//代表只按了一下
{
switch(keyCode){
case KeyEvent.KEYCODE_BACK://如果是搜索键
     camera.autoFocus(null);//自动对焦
  break;
   case KeyEvent.KEYCODE_DPAD_CENTER://如果是中间键
     camera.takePicture(null, null, new TakePictureCallback());//将拍到的照片给第三个对象中,这里的TakePictureCallback()是自己定义的,在下面的代码中
 break;
}
}
return true;//阻止事件往下传递,否则按搜索键会变成系统默认的
}
------------------------------------------------------------------------------------------
private final class TakePictureCallback implements PictureCallback{
public void onPictureTaken(byte[] data, Camera camera) {
try {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");
FileOutputStream outputStream = new FileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 100, outputStream);
outputStream.close();
camera.stopPreview();
camera.startPreview();//处理完数据之后可以预览
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
}
注意,代码中有两个回调类,一个是SurfaceCallback(),另外一个是TakePictureCallback(),初学者可能一时难以理解,通俗地讲,前者是用来监视surficeView这个暂时存放图片数据的显示控件的,根据它的显示情况调用不同的方法,包括surfaceCreated(),surfaceChanged(),surfaceDestroyed(),也就不难理解为什么会有这三个回调方法了(注意,在surfaceDestroyed()方法中必须释放摄像头,详细代码参见上方)。TakePictureCallback()是为了监视是否拍照而设计的接口,期中也仅有一个方法,camera将拍照得到的数据传入方法,我们便可以对拍照得到的数据进行进一步处理了。
至此,简单的拍照功能介绍完毕!
Android设备虚拟摄像头技术实现 实际生活中经常遇到要使用一个摄像头做多个事情的情况,但在开发中,一个摄像头只能被一个应用程序所占有,当一个应用程序在使用摄像头时,其他所有应用程序都无法在使用这个摄像头。怎么解决这个问题呢?其实可以采用虚拟摄像头技术。 从网上找的虚拟摄像头技术一个比较容易理解的框架图。 根据这个图很容易理解就是需要实现一个camera proxy,来实现把真实摄像头的数据时时放入虚拟摄像头。 以r... 阅读详情

相关推荐

调用手机ip摄像头_Python 实现在 App 端的人脸识别!手机解锁人脸识别

最近闲来无事,研究研究在安卓上跑 Python,想起以前玩过的 kivy 技术,kivy 是一个跨平台的 UI 框架,当然对我们最有用的是,kivy 可以把 Python 代码打包成安卓应用。但是由于安卓打包的工具链很长,包括 Android Sdk 打包 Java 代码、NDK 编译 Python、 编译各种 Python 依赖包,经常花一整天从入门到放弃。私信小编01 领取全套教程!这次使出认...

weixin_39663729的博客 800

安卓免root虚拟摄像头插件,虚拟视频替换本机相机,微信QQ陌陌都可以,只hook类代码

这个是开源的,然后功能就跟标题描述的一样,软件成品我这里不会发布,但是会把dex核心字节集文件分享出来,方便大家学习,软件原理就是通过HOOK技术截取相机视频流,然后实现虚拟视频的效果,然后微信QQ这些都能用的,仅供学习娱乐。const-string v0, "【VCAM】发现重复"const-string v0, "【VCAM】创建预览"const-string v2, "不存在替换视频\n"const-string v2, "当前路径:"安卓免root虚拟摄像头,看下这个功能!

kaiyuandaima666的博客 2万+

虚拟摄像头/无人直播效果分析,可替抖音/微信

一、可实现方案 VCAM + Magisk + Lsposed android_virtual_cam 基于 Xposed 的虚拟摄像头,采用 hook 方式去勾住系统 Camera 相关 API,然后读取本地指定视频文件进行替换 Magisk 用于 root 系统,刷入系统 boot.img,然后再安装 Riru 和 LSPosed 模块 Riru 模块 LSPosed 模块 二、效果图 三、实现过程和难点 难点一、Magisk 预装并烧写完成替换 boot 熟悉 Magisk 的伙计都知道,要想

cczhengv 1万+

android开启权限提示

首先在manifests中添加所需权限,比如拍照权限: <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 然后再Activity中添加代码 String...

scorpion_wang的博客 823

Android 版手机摄像头

Android 版手机监控PC上的

Android虚拟摄像头效果演示

在Android10上实现的虚拟摄像头,打开摄像头看到的是设置好的视频,可拍照,录像等

Android开发中调用摄像头功能详解

我们要调用摄像头的拍照功能,显然 第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码         <uses-permission android:name="android.permission.READ_PHONE_STATE" />         <uses-permissio

一花一世界 2978

计算机组成原理 微程序控制器实验

微程序控制器实验 实验环境 计算机组成原理实验环境 实验目的 掌握微程序控制器的组成原理和工作过程。 理解微指令和微程序的概念,理解微指令与指令的区别与联系。 掌握指令操作码与控制存储器中微程序的对应方法。熟悉根据指令操作码从控制存储器中读出微程序的过程。 实验要求 做好实验预习,读懂实验电路图,熟悉实验元器件的功能特性和使用方法。 按照实验内容与步骤的要求,独立思考,认真仔细地完成实验。 写出实验报告。 实验电路        

Long_UP的博客 7万+

H5中,嵌入式webview中,调用摄像头拍照功能的实现

参考资料: 1、https://github.com/robnyman/robnyman.github.com/tree/master/camera-api【老外写的demo】 2、https://www.jianshu.com/p/3befaa79e131【只写了ios的实现】 3、https://www.jianshu.com/p/877eb9ace1d3 【重点讲的是android方面的写法】 ...

一键写代码的博客 3711

基于FPGA的cy7c68013a双向通信实验

基于FPGA的cy7c68013a双向通信实验     本实验是基于FPGA的cy7c68013a的USB双向通信实验,以前折腾过一段时间cy7c68013a,没有入门时感觉好难,入门了就会感觉很简单。本教程主要内容:     1.cy7c68013a的固件编写,以及生成iic固件和下载固件。     2.cy7c68013a的slave模式,以及他的读写时序     3.cy7c6801...

乘风的博客 3万+

怎么在豆包里做生成式引擎优化(GEO)

本文系统介绍了豆包平台生成式引擎优化(GEO)的全套方法体系。文章首先解析了豆包与传统搜索引擎的核心差异,强调其多模态理解和上下文感知特性,并指出GEO需从关键词匹配转向用户意图动态解析。随后详细阐述了GEO优化的三大核心策略:用户意图解析技术、实时内容适配框架和权威信号强化方法,配以技术实现路径和案例说明。最后提出GEO与SEO融合的未来趋势,建议企业构建统一知识库,实现全渠道声誉管理。全文包含大量实操代码和工具链指导,为企业在AI时代的内容优化提供系统解决方案。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 2378

Android Auto 中使用车载摄像头解析

(如倒车影像、行车记录仪等),因为车辆摄像头通常由汽车制造商的原生系统控制。等工具将手机摄像头画面投射到 Android Auto(需 USB 调试权限)。在 Android Auto 中打开该应用,即可查看实时画面(如果支持投屏)。:Android Auto 无法直接控制或显示车载摄像头。:此方法可能影响驾驶安全,且部分车型会屏蔽非官方投屏。(部分型号支持 Android Auto)使用行车记录仪配套应用(部分支持投屏)。的车型(如沃尔沃、Polestar)。依赖车辆原生摄像头系统(如倒车影像)。

斗锋在干嘛的博客 1176

亚马逊SP-API授权实战:从OAuth流程到Refresh Token获取

本文详细解析了亚马逊SP-API授权流程,从OAuth认证到Refresh Token获取的全过程。通过实战经验分享,帮助开发者快速掌握Marketplace Appstore、Website Workflow和自行授权三种方式,解决常见错误如MD5100和MD9999,并提供了安全存储Refresh Token的最佳实践。

weixin_30379531的博客 518

Android 调用摄像头功能演示项目

Android 调用摄像头功能演示项目 去发现同类优质开源项目:https://gitcode.com/ 在Android开发过程中,调用摄像头进行拍照是一项常见需求。本项目旨在提供一个简单的示例,展示如何在Android应用中调用摄像头功能进行拍照。 项目简介 本项目是一个Android应用程序,它集成了摄像头拍照的功能。用户可以通过界面上的按钮启动摄像头,进行拍照,并将拍摄的照片显示在应用界面...

gitblog_06785的博客 631

基于MATLAB的数字滤波器之低通滤波器

本文首先介绍了数字低通滤波器的概念和原理,其次论述了低通滤波器的技术指标和设计步骤,最后给出了数字低通滤波器应用于信号去噪的MATLAB代码。

总结论文中的算法并给出论文的复现代码 3万+

13、离散时间系统建模与分析

本文系统介绍了离散时间系统的建模与分析方法,涵盖连续时间模型的离散化过程、系统稳定性判断准则、输入输出模型转换方法以及有限脉冲响应和阶跃响应模型的应用。通过多个示例详细展示了不同系统在离散化过程中的特性变化,并探讨了采样间隔对系统动态特性的影响。此外,文章还分析了时间延迟的处理方法,并总结了关键知识点及操作步骤,为离散时间系统的实际应用提供了理论基础和实践指导。

2w3e4r5t6y的博客 189

Delphi 10.2 Android 摄像头调用示例:轻松掌握移动开发核心技能

Delphi 10.2 Android 摄像头调用示例:轻松掌握移动开发核心技能 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在移动应用开发中,摄像头调用是一个常见且重要的功能。无论是社交应用中的拍照分享,还是企业应用中的扫码识别,摄像头都是不可或缺的一部分。为了帮助开发者更好地掌握这一技能,我们推出了一个基于 Delphi 10.2 的 Android 摄像头调用...

gitblog_09736的博客 475

如何在不牺牲精度的前提下,把 YOLOv11 压缩到 Jetson 能跑的程度

YOLOv11 在目标检测任务中具备较强的准确性与多尺度鲁棒性,但其原始模型参数规模与计算量,对边缘设备来说并不友好,特别是面向 Jetson 这类资源受限的推理平台。本文基于实际部署场景,逐步拆解从结构层级改造、剪枝策略制定、量化导出流程,到 Jetson TensorRT 推理落地全过程。在不牺牲主干精度的前提下,最终实现 YOLOv11 推理延迟缩短 3 倍、模型体积压缩 4 倍、mAP 损失控制在 1% 以内的轻量化优化结果,并总结出一条可复用的工程路径,供工业界与边缘侧模型部署开发者参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2426
上一篇: android 停止Handler
下一篇: 收藏关于android应用开发的博文
imdxt1986
博客等级 码龄16年 64粉丝 77原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值