精华内容
下载资源
问答
  • 如题,既然是判断用户是否允许了摄像头权限,那么,咱们就忽略是Manifest配置的问题,因为这是开发者的事...Android API没提供判断摄像头权限是否被关闭的方法,但是,我们依然有办法,直接上代码: public static bo
  • 前端调用手机摄像头权限进行扫码解析(demo含Vue及原生)前端调用手机摄像头权限进行扫码解析(demo含Vue及原生js写法)引子实践此时已经可以成功调用摄像头,接下来集成进Vue工程中最后 前端调用手机摄像头权限进行...

    前端调用手机摄像头权限进行扫码解析(demo含Vue及原生js写法)

    项目必须基于HTTPS协议!!!

    引子

    本人马上毕业了,现在在新单位实习前端,有个需求需要在移动Web端调用摄像头进行扫码,这方面之前没有接触过,但时间有限,只能走一步看一步,首先收集资料:

    1. 调用设备扫码功能在安卓app上有api可以调用,Hbulider 5+app中也有现成的api,但我这个项目已经开发了很久了,只能新加模块,显然不符合上面的情况。
    2. 原生Web有个api叫 Navigator.mediaDevices。
      mediaDevices 是 Navigator 只读属性,返回一个 MediaDevices 对象,该对象可提供对相机和麦克风等媒体输入设备的连接访问,也包括屏幕共享。
    3. 扫码解析则可以使用 qrcode.js 这一个js库。

    实践

    // 调用摄像头方法,原生Navigator.mediaDevices api
    function setwebcam(){
    var options = true;
    if(navigator.mediaDevices && navigator.mediaDevices.enumerateDevices)
    {
      try{
          navigator.mediaDevices.enumerateDevices().then(function(devices) {
            devices.forEach(function(device) {
              if (device.kind === 'videoinput') {
    		options={'deviceId': {'exact':device.deviceId}, 'facingMode':'environment'} ;
    			console.log(device);
                }
               console.log(device.kind + ": " + device.label +" id = " + device.deviceId);
              });
    		  console.log(options)
              setwebcam2(options);
            });
        }
        catch(e)
        {
            console.log(e);
        }
    }
    else{
        console.log("无设备信息。" );
    }
    }
    

    其中 ‘facingMode’:‘environment’ 则可以稳定调用后置摄像头,不会再出现网上大家所说的调用前置的情况。
    此时需要与前端元素配合

    // html 样式自调
    <div class="container">
            <div id="scan">
                <video id="vcode" autoplay></video>
                <canvas id="code-canvas"></canvas>
            </div>
        </div>
    start()
    //  function
    function start(){
        createCanvas(800,600);
        setwebcam();
    }
    // 此处借鉴了导师给的方法,构建canvas
    function createCanvas(w,h){
        n = navigator;
        v = document.getElementById("vcode");
        var gCanvas = document.getElementById("code-canvas");
        gCanvas.style.width = w + "px";
        gCanvas.style.height = h + "px";
        gCanvas.width = w;
        gCanvas.height = h;
        gCtx = gCanvas.getContext("2d");
        gCtx.clearRect(0, 0, w, h);
    	console.log("canvas complete!");
    } 
    function setwebcamres(options){
              var setvideo = n.mediaDevices.getUserMedia({video: options, audio: false});
              setvideo.then(success, error);
    
    }
    

    此时已经可以成功调用摄像头,接下来集成进Vue工程中

    安装zxing.js依赖

    npm i @zxing/library --save
    npm install --save webrtc-adapter

    <template>
      <div class="container">
        <video
          id="video"
          ref="video"
          width="421"
          height="400"
          class="video-container"
        ></video>
          <div>{{ textContent }}</div>
      </div>
    </template>
    
    <script>
      import adapter from 'webrtc-adapter';
      // WebRTC适配器 只需要引入
      import { BrowserMultiFormatReader } from '@zxing/library';
      export default {
        data() {
          return {
            codeReader: new BrowserMultiFormatReader(),
            textContent: undefined,
          };
        },
        async created() {
          this.codeReader.getVideoInputDevices()
            .then((videoInputDevices) => {
              const selectedDeviceId = videoInputDevices[1].deviceId; //第二个摄像头
              this.codeReader.decodeFromInputVideoDeviceContinuously(selectedDeviceId, 'video', (result, err) => {
                if (result) {
                  console.log(result);
                  this.textContent = result.text;
                  this.scanRoomResult(this.textContent);
                }
                if (err && !(err)) {
                  console.error(err);
                }
              });
              console.log(`Started continous decode from camera with id ${selectedDeviceId}`);
            })
            .catch((err) => {
              console.error(err);
            });
        },
        methods: {
          scanRoomResult(roomName) {
            this.scanRoomInfo = roomName;
            this.scanRoomInfo = JSON.parse(this.scanRoomInfo);// 将字符串转换成json对象
            if (!this.scanRoomInfo.locationId) {
              this.textContent = 'QrCode Error!';
                } else {
              this.textContent = this.scanRoomInfo.locationId;
              const selector = this.$refs['inspectionRuleSelector'];
              selector && (selector.showRulePicker = true);
            }
          }
        }
      };
    </script>
    
    <style scoped lang="less">
    .container{
      position: relative;
    }
      .video-container{
        margin-top: 5vh;
      }
    </style>
    
    

    最后

    以上,在Vue中使用zxing有一点不好就是摄像头可控性不强,他的源码构造函数中没有把facingMode放出来,这也就不太好控制摄像头顺序,因为每个手机摄像头顺序都不一定是相同的。
    字段中没有判断摄像头的字段

    展开全文
  • 关于检测手机摄像头权限的问题

    千次阅读 2017-11-23 12:50:55
    摄像头权限时系统的危险权限,对于6.0以上和6.0以下系统有着不同的检测方法。6.0以上系统:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//6.0以上系统 Log.e(TAG, "onCreate: 6.0以上系统" ); try { /...

    摄像头权限时系统的危险权限,对于6.0以上和6.0以下系统有着不同的检测方法。

    6.0以上系统:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//6.0以上系统
                Log.e(TAG, "onCreate: 6.0以上系统" );
                try {
                    //获得程序targetSdkVersion
                    PackageInfo info = getPackageManager().getPackageInfo(getPackageName(),0);
                    int targetSdkVersion = info.applicationInfo.targetSdkVersion;
                    if(targetSdkVersion>23){//targetSdkVersion>23时使用ContextCompat.checkSelfPermission()检查权限
                        if(ContextCompat.checkSelfPermission(this, needPermissions[0]) != PackageManager.PERMISSION_GRANTED
                                || ActivityCompat.shouldShowRequestPermissionRationale(this, needPermissions[0])){
                            //未授权
                            showMissingPermissionDialog();
                        }else{//已授权
                            initView();
                        }
                    }else{//targetSdkVersion>23时使用PermissionChecker.checkSelfPermission检查权限
                        if(PermissionChecker.checkSelfPermission(this,needPermissions[0]) == PermissionChecker.PERMISSION_GRANTED){
                            //已授权
                            initView();
                        }else{
                            //未授权
                            showMissingPermissionDialog();
                        }
                    }
                } catch (PackageManager.NameNotFoundException e) {
                    e.printStackTrace();
                }
            }

    6.0以下系统:系统没有直接提供检测的API,只能判断系统摄像头是否可用

    public static boolean cameraIsCanUse() {
            boolean isCanUse = true;
            Camera mCamera = null;
            try {
                mCamera = Camera.open();
                Camera.Parameters mParameters = mCamera.getParameters();
                mCamera.setParameters(mParameters);
            } catch (Exception e) {
                isCanUse = false;
            }
    
            if (mCamera != null) {
                try {
                    mCamera.release();
                } catch (Exception e) {
                    e.printStackTrace();
                    return isCanUse;
                }
            }
            return isCanUse;
        }

    这样大概可以设配大多数手机,本人测试时候只用了两台机器,一个是6.0以上的小米note手机,一个是6.0以下的华为SCL-TL00H型号手机,如若有什么问题,欢迎大家指教

    展开全文
  • 手机网页打开摄像头

    2016-02-20 08:05:18
    页面HTML+JS代码,可以打开手机摄像头拍照上传。
  • 一个小功能源码,利用JS调用手机摄像头,当访问网址后就能拍摄照片,前提是客户端给了权限。 1、由于系统安全机制,ios系统必须使用自带的Safari浏览器(或者第三方APP调用的是Safari内核)才行 2、安卓端只要该APP...
  • //请求打开手机摄像头权限,手机端会弹出一个选择弹窗 WebCamDevice[] devices = WebCamTexture.devices; camTexture = new WebCamTexture(devices[0].name,Screen.width,Screen.height); camTexture.Play(); camera...
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.SceneManagement;
    using UnityEngine.UI;
    
    public class OpenCamera : MonoBehaviour
    {
        public RawImage cameraImage;
        private WebCamTexture camTexture;
        private void Start()
        {
            StartCoroutine(OpenPhoneCamera());
        }
        /// <summary>
        /// 打开手机摄像头
        /// </summary>
        /// <returns></returns>
        public IEnumerator OpenPhoneCamera()
        {
            yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);//请求打开手机摄像头权限,手机端会弹出一个选择弹窗
            WebCamDevice[] devices = WebCamTexture.devices;
            camTexture = new WebCamTexture(devices[0].name,Screen.width,Screen.height);
            camTexture.Play();
            cameraImage.texture = camTexture;
    
        }
    }
    

     

    展开全文
  • 问题一:(为什么不管怎么配置都显示前置摄像头) 想正常使用API必须在https环境下进行,否则你会发现不管怎么写,都只能调用默认的摄像头(大部分都是前置,只有少部分是后置) 前端开发者可以将文件上传至码云仓库...
  • Unity获取摄像头权限

    千次阅读 2020-03-24 13:44:32
    } public IEnumerator Call() { // 请求权限 yield return Application.RequestUserAuthorization(UserAuthorization.WebCam); if (Application.HasUserAuthorization(UserAuthorization.WebCam) && WebCamTexture....

    直接上代码,unity帮我们内置了功能。

    using System.Collections;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class Test : MonoBehaviour
    {
        // 图片组件
        public RawImage rawImage;
    
        //图形组件父实体
        public RectTransform imageParent;
    
        //当前相机索引
        private int index = 0;
    
        //当前运行的相机
        private WebCamTexture currentWebCam;
        void Start()
        {
            StartCoroutine(Call());
    
        }
    
        public IEnumerator Call()
        {
            // 请求权限
            yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
    
    
            if (Application.HasUserAuthorization(UserAuthorization.WebCam) && WebCamTexture.devices.Length > 0)
            {
                // 创建相机贴图
                currentWebCam = new WebCamTexture(WebCamTexture.devices[index].name, Screen.width, Screen.height, 60);
                rawImage.texture = currentWebCam;
                currentWebCam.Play();
    
                //前置后置摄像头需要旋转一定角度,否则画面是不正确的,必须置于Play()函数后
                rawImage.rectTransform.localEulerAngles = new Vector3(0, 0, -currentWebCam.videoRotationAngle);
            }
        }
    
        //切换前后摄像头
        public void SwitchCamera()
        {
            if (WebCamTexture.devices.Length < 1)
                return;
    
            if (currentWebCam != null)
                currentWebCam.Stop();
    
            index++;
            index = index % WebCamTexture.devices.Length;
    
            // 创建相机贴图
            currentWebCam = new WebCamTexture(WebCamTexture.devices[index].name, Screen.width, Screen.height, 60);
            rawImage.texture = currentWebCam;
            currentWebCam.Play();
    
            //前置后置摄像头需要旋转一定角度,否则画面是不正确的,必须置于Play()函数后
            rawImage.rectTransform.localEulerAngles = new Vector3(0, 0, -currentWebCam.videoRotationAngle);
        }
    
    }

     

    展开全文
  • 有个奇怪的问题,app里面需要摄像头权限,当我首次进入app第一个页面的时候并没有提醒是否允许使用摄像头,当我调用微信第三方登录的时候却出现了,这个页面根本没有涉及到摄像头权限。 想问下各位大神,有没有办法...
  • 6.0系统可以动态的获取系统的权限API>22例如摄像头举一反三写一个动态获取摄像头的方法,其他的权限也可以稍微修改使用。在调用摄像头的地方进行判断,系统的版本Build.VERSION.SDK_INT>22如果系统6.0或以上,就判断...
  • h5获取浏览器的相机和摄像头权限

    千次阅读 2019-07-30 17:05:35
    如果网页使用了getUserMedia方法,浏览器就会询问用户,是否同意浏览器调用麦克风或摄像头。如果用户同意,就调用回调函数onSuccess;如果用户拒绝,就调用回调函数onError。 WebRTC详解:...
  • if (e == 1) { this.modify_content = '摄像头权限(拍摄头像)'; //相机 switch (uni.getSystemInfoSync().platform) { case 'android': this.requestAndroidPermission('android....
  • iOS开发判断是否开启摄像头权限

    千次阅读 2017-05-10 16:39:25
    虽然iOS10添加了隐私权限提示,但是当我们拒绝开启权限后,再次调用就会出现崩溃问题,为了避免这个问题,我们可以在调用设备前判断是否开启了调用权限- (void)judgeCameraLimits{ /// 先判断摄像头硬件是否好用 if(...
  • Android 判断摄像头权限方法

    万次阅读 2016-01-23 14:20:54
    由于项目需要,我们需要在启动摄像头前,预先判断一下我们的应用是否有摄像头权限(包括系统设置以及第三方安全软件是否禁止了摄像头打开权限)。 目前主要用到了一下两个方法结合起来判断。 1.通过系统的检查权限...
  • webView获取权限问题 试过在程序上动态赋予摄像头权限后,开启网页调用摄像头还是会提示权限被拒绝,原因是Android 浏览器上回调默认是拒绝的,还是需要重webChromeClient里面的方法,手动赋予,或者自定义dialog...
  • 说实话,个人总结这个demo也就图一乐(总算有契机去初始video标签了),windows笔记本里开浏览器跑会调笔记本摄像头,但在手机上只可以调前置摄像头,没去深入研究手机端如何调后置摄像头 正文: 在线项目地址:...
  • 手机端网页调用摄像头 拍照识别二维码,在普通浏览器中正常使用。在webview打开网页需更改Android权限
  • 使用电脑本地摄像头权限关于如何调用本地摄像头的问题准备工具 (VS Code,Vue脚手架工具,Element UI)vue调用本地摄像头实现拍照功能,由于调用摄像头有使用权限,只能在本地运行,线上需用https域名才可以使用。...
  • 能否实现评估手机和安卓手机浏览器打开H5页面调用摄像头默认打开前置摄像头,并且只能打开相机拍摄,不能从相册里选取,请各位大神出点主意
  • H5移动端调用手机摄像头

    千次阅读 2018-07-23 22:23:20
    2. 在IOS中 加了capture,就只能调用摄像头不能调用相册 解决办法:  判断ios,如果是ios就去掉capture属性. var file = document.querySelector('input'); if (getIos()) { file.removeAttribute(...
  • blog:http://www.cnblogs.com/ityizhainan/p/6283328.html
  • 我现在做的需求是实现人脸识别登录,使用h5编写页面,发现写好的js代码只可以在手机qq浏览器下运行,求大神指教怎么解决这个问题? 下面附上js代码: var aVideo=document.getElementById('video'); var aCanvas=...
  • 本来想按照 ...操作,后面发现 摄像头属于 video4linux 子系统,干脆把整个video4linux子系统设定全员访问权限 # 查看摄像头0设备信息 udevadm info /dev/video0 # 设定udev规则 sudo...
  • 自己总结的手机端拍照和相册原生的方法 HTML代码 <div> //要显示的图片 <div class="imgBox name"> <img :src="imgSrc" /> </div> <van-action-sheet v-model="show1"> <ul&...
  • ios访问相册,摄像头权限

    千次阅读 2016-06-13 17:37:07
    判断用户是否有权限访问相册需要引用 AssetsLibrary.framework 库#import ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus]; if (author == AVAuthorizationStatusRestricted || author ==...
  • H5 页面内打开手机摄像头

    千次阅读 2018-10-30 14:53:00
    地址:https://github.com/jbialobr/JsQRScanner 转载于:https://www.cnblogs.com/-mrl/p/9876801.html
  • Android 录音和摄像头权限适配

    万次阅读 2016-10-29 19:33:33
    最近在研究权限适配的相关内容,整理以前的权限博客如下: ... 这篇博客主要是介绍录音权限和摄像头权限的适配,android permission权限与安全机制解析(下)这篇博客中我介绍到了 6.0 之后危险权限的
  • 一个小功能源码,利用JS调用手机摄像头,当访问网址后就能拍摄照片,前提是客户端给了权限。 1、由于系统安全机制,ios系统必须使用自带的Safari浏览器(或者第三方APP调用的是Safari内核)才行 2、安卓端只要该APP...
  • HTML5获取手机摄像头拍照

    千次阅读 2017-01-03 15:57:04
    HTML5获取摄像头进行拍照,存储
  • 问题:在一个项目开发的过程中,发生摄像头权限申请时,若点击了拒绝摄像头权限,应用程序出现奔溃问题,如下: 解决办法: 需要两种方法同时验证是否具有摄像头使用权限: 方法一: /** * 通过系统的检查权限方法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,325
精华内容 4,530
关键字:

如何关闭手机摄像头权限