快上车,老司机带你实现后台录像功能

  有时候我们想要在不打开相机预览界面的情况下,实现后台拍照或者录像,这种情况该怎么实现呢?

  其实很简单,先讲一下实现的原理,我们开启一个前台service(android新版本不让后台service去操作相机,所以选择前台service),然后通过一个很小的surfaceview或者textureview,比如5*5像素绑定在前台service当中,这样基本肉眼不可见,来达到后台录像的目的。

 代码如下:

    首先是基本的权限:

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

前台服务:

package com.jxd.recordbackservice;

import android.app.Notification;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.IBinder;
import android.text.format.DateFormat;
import android.util.Log;
import android
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
假设司机和售票员是两个线程,可以使用Java的synchronized关键字实现pv操作。 具体实现如下: 1. 创建一个共享变量count,代表可用的座位数。 ``` private int count = 10; ``` 2. 在售票员线程,使用synchronized关键字锁住count变量,当count为0时,售票员线程进入等待状态(wait),直到司机线程释放锁并通知售票员线程(notify)。 ``` public synchronized void p() { while (count == 0) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } count--; System.out.println("售票成功,当前可用座位数:" + count); notify(); } ``` 3. 在司机线程,使用synchronized关键字锁住count变量,当count为10时,司机线程进入等待状态(wait),直到售票员线程释放锁并通知司机线程(notify)。 ``` public synchronized void v() { while (count == 10) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } count++; System.out.println("司机上车,当前可用座位数:" + count); notify(); } ``` 4. 在主函数创建司机和售票员线程,分别执行p()和v()方法,模拟售票过程。 ``` public static void main(String[] args) { Driver driver = new Driver(); TicketSeller seller = new TicketSeller(driver); new Thread(seller).start(); new Thread(driver).start(); } ``` 完整代码如下: ``` public class Driver implements Runnable { private int count = 10; public synchronized void v() { while (count == 10) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } count++; System.out.println("司机上车,当前可用座位数:" + count); notify(); } @Override public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } v(); } } } public class TicketSeller implements Runnable { private Driver driver; public TicketSeller(Driver driver) { this.driver = driver; } public synchronized void p() { while (driver.count == 0) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } driver.count--; System.out.println("售票成功,当前可用座位数:" + driver.count); notify(); } @Override public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } p(); } } } public class Main { public static void main(String[] args) { Driver driver = new Driver(); TicketSeller seller = new TicketSeller(driver); new Thread(seller).start(); new Thread(driver).start(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

景兄弟1366

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值