service中的代码:

public class BackgroundVideoRecorder extends Service implements SurfaceHolder.Callback {private WindowManager windowManager;private SurfaceView surfaceView;private Camera camera = null;private MediaRecorder mediaRecorder = null;@Overridepublic void onCreate() {// Start foreground service to avoid unexpected killNotification notification = new Notification.Builder(this).setContentTitle("Background Video Recorder").setContentText("").setSmallIcon(R.drawable.timg).build();startForeground(1234, notification);// Create new SurfaceView, set its size to 1x1, move it to the top left corner and set this service as a callbackwindowManager = (WindowManager) BackgroundVideoRecorder.this.getSystemService(Context.WINDOW_SERVICE);surfaceView = new SurfaceView(this);WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(1, 1,WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,PixelFormat.TRANSLUCENT);//全屏显示在最上图层上
//        final WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
//                WindowManager.LayoutParams.WRAP_CONTENT,
//                WindowManager.LayoutParams.WRAP_CONTENT,
//                WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
//                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
//                        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
//                        | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
//                PixelFormat.TRANSLUCENT
//        );layoutParams.gravity = Gravity.LEFT | Gravity.TOP;windowManager.addView(surfaceView, layoutParams);surfaceView.getHolder().addCallback(this);}// Method called right after Surface created (initializing and starting MediaRecorder)@Overridepublic void surfaceCreated(SurfaceHolder surfaceHolder) {mediaRecorder = new MediaRecorder();camera = Camera.open(1);if (camera != null) {camera.unlock();mediaRecorder.setCamera(camera);}// 这两项需要放在setOutputFormat之后mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);// Set output file formatmediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));mediaRecorder.setVideoSize(640, 480);mediaRecorder.setVideoFrameRate(30);mediaRecorder.setVideoEncodingBitRate(1024 * 1024);mediaRecorder.setOrientationHint(90);mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory() + "/" +DateFormat.format("yyyy-MM-dd_kk-mm-ss", new Date().getTime()) +".mp4");try {mediaRecorder.prepare();mediaRecorder.start();} catch (Exception e) {Log.e("mediaRecorder", e.toString());camera.release();}}// Stop recording and remove SurfaceView@Overridepublic void onDestroy() {mediaRecorder.stop();mediaRecorder.reset();mediaRecorder.release();camera.lock();camera.release();windowManager.removeView(surfaceView);}@Overridepublic void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder surfaceHolder) {}@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}

记得在AndroidManifest.xml中添加权限:

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

有些人可能会因为权限不全而报一下错误:

android.view.WindowManager$BadTokenException:

Unable to add window android.view.ViewRootImpl$W@1a04061c -- permission denied for this window type

添加权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

这部分代码有什么问题可以在下评论

也可以参考下:https://blog.csdn.net/qq_36818970/article/details/79726668

service中调用摄像头在无页面显示的情况下进行录像相关推荐

  1. Android 后台实现录像,无页面息屏状态下后台录像

    用的是电量图标,前台服务,华为手机验证OK public class VideoRecorderService extends Service implements SurfaceHolder.Cal ...

  2. matlab实时摄像头处理,在MATLAB中调用摄像头实时地显示图像

    <在MATLAB中调用摄像头实时地显示图像>由会员分享,可在线阅读,更多相关<在MATLAB中调用摄像头实时地显示图像(1页珍藏版)>请在人人文库网上搜索. 1.clc;clf ...

  3. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  4. 在网页中调用摄像头实现拍照上传 - 高拍仪二次开发

    在网页中调用摄像头实现拍照上传 高拍仪二次开发     在一些公共部门的办事处,比如银行.护照办理中心.税务等,我们可能会注意到办公桌上摆着这样一台机器.办公人员用它拍摄各种证件.文件.表格,有时候还 ...

  5. c++ 二次开发 良田高拍仪_在网页中调用摄像头实现拍照上传 - 高拍仪二次开发...

    来源于  https://blog.csdn.net/weixin_40659738/article/details/78252562 在网页中调用摄像头实现拍照上传 高拍仪二次开发 在一些公共部门的 ...

  6. 软键盘显示的情况下弹出dialog,dialog会出现在软键盘上方

    问题: 界面中有一个edittext,选中时候弹出软键盘:在软键盘显示的情况下点击另外一个弹出底部dialog的控件时候,发现dialog出现在软键盘上方了,如下图所示: 解决办法 弹出dialog之 ...

  7. Methyltetrazine-DBCO,1802238-48-7该试剂可用于在无催化剂试剂的情况下,将含氮肽或蛋白质转化为四胺改性多肽或蛋白质

    产品名称:Methyltetrazine-DBCO 供应商:陕西新研博美生物科技有限公司 CAS:1802238-48-7 分子式:C34H33N7O7S 分子量: 683.7 主要用途:陕西新研博美 ...

  8. java中调用谷歌的无界浏览器对页面元素进行截图

    调用谷歌的无界浏览器,最起码得先装一个谷歌浏览器,然后进行下一步, 添加pom依赖,或者单独导入jar包也可以 <dependency><groupId>commons-io& ...

  9. vue中调用摄像头拍照,并把拍照的base64格式转换为file传递后台

    需求: 在vue项目中使用摄像头拍摄照片传递,进行上传,如果上传成功可以获取到url链接,进行下一步的操作 内容梳理 1.首先进入页面打开摄像头 2.点击手动拍照进行拍摄照片,实时显示拍照效果 3.拿 ...

最新文章

  1. 李永乐线性代数手写笔记-向量
  2. 文巾解题 177. 第N高的薪水
  3. 笔记-项目采购管理-索赔的处理
  4. 一文搞懂JAVA与GO垃圾回收
  5. 【原创】mysql数据库异常:data truncate for column “*” at row *;data too long *。原因,及解决。...
  6. 《2008胡润百富榜》前三名
  7. [Oracle]GoldenGate官方文档
  8. 达观数据:Tornado原理浅析及应用场景探讨
  9. 牛客 处女座和小姐姐
  10. FW: Why PUT and DELETE?铪铪
  11. 三脚升压电感工作原理
  12. unity shader development[11]
  13. linux清理根目录下的垃圾,Linux 根目录满了解决方法
  14. swift json解析 JSONSerialization
  15. java if函数的使用方法_IF函数的使用方法(入门+进阶+高级)
  16. 静态网页与动态网页的差异
  17. 微信小程序之猜拳游戏
  18. bind dlz mysql rpm_BIND+DLZ+MYSQL | 学步园
  19. 几种视频格式(RMVB,FLV,MP4,AVI等等)区别比较
  20. 直播预告 | NeurIPS 专场八

热门文章

  1. 对MCSE认证学习的一点看法
  2. 如何在Mac上快速压缩和解压文件?Mac上解压和压缩文件的方法
  3. DeDeCMS-仿站
  4. 将自己的手机卡设置成空号
  5. wmv怎么转换成mp4?
  6. cs231n assignment1 SVM
  7. 微软excel设置鼠标点击单元格时行列样式,十字样式
  8. 聚观早报 | 微信也要下场做“外卖”?;《羊了个羊》营收破亿
  9. 使用RFE(反向特征消除)进行数据降维
  10. 免费NAC最简部署拓扑