1

我已授予相机和麦克风的所有权限。在 iframe 的元标记中启用 CSP。仍然无法在 iframe 的 getusermedia 中获得相机和麦克风的许可。

主页.html

离子内容类='填充有子标题'>

应用组件.ts

constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen, private androidPermissions: AndroidPermissions) 
{
platform.ready().then
   (() => 
      {

           statusBar.styleDefault();
           splashScreen.hide();

           this.androidPermissions.requestPermissions([
                this.androidPermissions.PERMISSION.CAMERA, 
                this.androidPermissions.PERMISSION.MODIFY_AUDIO_SETTINGS,
            this.androidPermissions.PERMISSION.RECORD_AUDIO
           ]);

  //navigator.mediaDevices
  navigator.mediaDevices
    .getUserMedia({
      audio: true,
      video: true
    })
    .then(mediaStream => {
        console.log("Video camera platform ready")
    });


});
}

AndroidManifest.xml

 <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="26" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
4

2 回答 2

6

更新 - 2018 年 4 月 11 日 - 工作离子示例

正如所承诺的那样,我今天对此有所了解。现在完整回答您的问题:是的,您可以在 Android 上访问 ionic 内部的 getUserMedia。

有关工作示例和屏幕截图,请参见我的 GitHub 项目。

在此处查看此功能分支,它成功测试了 iframe 中的 getUserMedia

涉及的步骤:

  • 安装离子
  • 离子启动 getUserMedia 空白
  • cd getUserMedia
  • 离子cordova插件添加cordova-plugin-android-permissions
  • npm install --save @ionic-native/android-permissions
  • npm install webrtc-adapter --save
  • 链接到 angular.json 脚本中的适配器(链接
  • 将 AndroidPermissions 添加到 app.module.ts 提供程序(链接
  • 在 home.component.ts 中创建摄像头访问代码(链接
  • 将 android 清单权限添加到 config.xml 和 AndroidManifest.xml (链接,如果配置不复制转到平台/android/app/src/AndroidManifest.xml)
  • 离子科尔多瓦平台添加android
  • 离子科尔多瓦构建android
  • 离子科尔多瓦运行android

您还可以看到React Native原生 AndroidCordova的替代版本。

由于 Apple 对 WKWebView 和 UIWebView 的安全限制,截至本次更新对 iOS 的支持仍然不支持。

iframe:为确保 getUserMedia 在其中工作,请确保您:

  • 嵌入站点的CORS需要有允许的访问源头
  • 启用安全权限以访问摄像头和麦克风<iframe allow="camera; microphone">

有关 iframe 功能的更多信息,请阅读以下内容:


是的,理论上它可以工作。请参阅下面的示例,了解如何在 Android 中执行此操作。对于 iOS,由于 WKWebView 的限制,这目前是不可能的。我已经链接到下面的 StackOverFlow 问题,关于人们如何在 Ionic 所基于的 Cordova 上实现这一点。

无论框架如何,让 getUserMedia 在 Android 上工作所需的核心主要步骤是:

  1. 确保您的应用是 Android API 21 及更高版本
  2. 向清单添加权限(链接到文件
  3. 确保使用getUserMedia适配器以实现 API 兼容性
  4. 确保将 webrtc 添加到 Android 项目 gradle 文件(文件链接
  5. 将 Chrome WebView 权限覆盖为大访问权限(文件示例的链接,第 106 行
  6. 在应用程序启动时,要求用户授予访问相机的权限。

您具体面临的问题是 4. 或 5. 看起来该项目让您走得那么远。权限错误很可能归结为您的应用正在使用的 Chrome WebView 没有覆盖权限,和/或它是并且用户没有手动启用该权限。

因此,在 Ionic 框架中,您需要扩展其浏览器以访问覆盖 onRequestPermissionsResult。为此,您需要制作一个 Cordova 插件,然后创建 Ionic 绑定。

更多关于类似框架的阅读可以在这里找到:

于 2018-10-31T09:20:01.733 回答
-1

在 Android Chrome 浏览器中。Navigator.mediaDevice.getUserMedia() 仅支持 Chrome 版本 52。请检查您的 chrome 浏览器版本。

您可以使用 Cordova-plugin-media cordova 插件来录制音频文件。

于 2018-09-28T14:54:33.930 回答