这篇文章解释了进入else分支的执行逻辑,因为在使用SAPUI5条码扫描器调用本地摄像头时CordovaAPI也是不可用的在测试浏览器时PC:如果CordovaAPI不可用,但isUserMediaAccessSupported仍然返回true,您仍然可以打开扫描对话框:/***用于检测无法访问html5用户媒体api且无法使用设备相机的浏览器*@private*@returns{boolean}true是html5兼容浏览器支持的用户媒体访问*/functionisUserMediaAccessSupported(){return!!(window&&window.navigator&&window.navigator.mediaDevices&&window.navigator.mediaDevices.getUserMedia);}这里是window.navigator.mediaDevices。getUserMedia的含义:MediaDevices.getUserMedia()方法提示用户允许使用媒体输入,该媒体输入生成一个MediaStream,其轨道包含所请求的媒体类型。例如,流可以包括视频轨道(由硬件或虚拟视频源产生,例如相机、视频录制设备、屏幕共享服务等)、音频轨道(类似地由物理或虚拟音频源产生,例如麦克风、A/D转换器等),以及可能的其他轨道类型。它返回解析为MediaStream对象的Promise。如果用户拒绝许可,或者匹配的媒体不可用,则分别使用NotAllowedError或NotFoundErrorDOMException拒绝承诺。其中getUserMedia由浏览器原生实现。asyncfunctiongetMedia(constraints){letstream=null;尝试{stream=awaitnavigator.mediaDevices.getUserMedia(constraints);/*使用流*/}catch(err){/*处理错误*/}}传入getUserMedia的constraints参数:constraints是一个对象,指定要请求的媒体类型,以及每种类型的任何要求。constraints参数是一个包含两个成员的对象:video和audio,描述请求的媒体类型。必须指定一个或两个。如果浏览器找不到符合给定约束的指定类型的所有媒体轨道,则返回的Promise会被NotFoundErrorDOMException拒绝。如果为媒体类型指定了true,则该类型的轨道需要包含在结果流中。如果由于任何原因无法返回,则对getUserMedia()的调用将导致错误。虽然出于隐私原因无法访问有关用户摄像头和麦克风的信息,但应用程序可以使用额外的约束来请求它需要和想要的摄像头和麦克风功能。以下表达了对1280x720相机分辨率的偏好:{audio:true,video:{width:1280,height:720}}如果不存在具有此分辨率或更高分辨率的相机,则返回的Promise将被OverconstrainedError拒绝,并将不提示用户。
