简体   繁体   English

无法通过 react-native-webview 访问相机

[英]Can't access to camera through react-native-webview

I am using react-native-webview version 4.0.2.我正在使用react-native-webview版本 4.0.2。 So I have a webview that contains an add button that allows us to take picture with the camera but when clicking at that button nothing is shown and no camera permission shown.所以我有一个 webview,其中包含一个添加按钮,允许我们使用相机拍照,但是当单击该按钮时,没有显示任何内容,也没有显示相机权限。 This is on android side but working very well on ios (i can see permission and access to camera ).这是在 android 端,但在 ios 上运行良好(我可以看到相机的许可和访问权限)。

In my AndroidManifest.xml I do have:在我的AndroidManifest.xml中我有:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> 

So please do you have any suggestion?那么请问您有什么建议吗?

Try using:尝试使用:

<uses-sdk
    android:minSdkVersion="23"
    android:targetSdkVersion="__APILEVEL__" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO"
android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"
android:maxSdkVersion="18" />

1st step: use this in AndroidManifest.xml file第一步:在 AndroidManifest.xml 文件中使用它

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

2nd step: Grant multiple permission in App.js file第二步:在 App.js 文件中授予多个权限

const granted = await PermissionsAndroid.requestMultiple([
  PermissionsAndroid.PERMISSIONS.CAMERA,
  PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
  PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
]);

3rd step: use these properties inside webview第三步:在 webview 中使用这些属性

geolocationEnabled={true}
mediaPlaybackRequiresUserAction={false}
javaScriptEnabled={true}

你也需要在 webview mediaPlaybackRequiresUserAction={false} 中添加这个

If you use Expo, in my case, temporarily, I solve it by doing this.如果你使用 Expo,就我而言,暂时,我通过这样做来解决它。 In the website's code, not the react-native code, change在网站的代码中,不是 react-native 代码,更改

navigator.mediaDevices.getUserMedia({video : true, audio:true})

to

navigator.mediaDevices.getUserMedia({video : true})

In the long term, if you use Expo, you should switch to React Native cli从长远来看,如果你使用 Expo,你应该切换到 React Native cli

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM