如何解决为什么相机无法在Xamarin WebView上使用?
我有一个简单的Xamarin页面,该页面在WebView中调用WebRTC页面: 该页面可以在同一Android设备上的Chrome上正常运行,但不能在WebView上正常运行,因为没有错误!
AndroidManifest.xaml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.dpwcam">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="DPWCAM.Android" android:networkSecurityConfig="@xml/network_security_config"></application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUdio" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MODIFY_AUdio_SETTINGS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
</manifest>
MyWebVieWrenderer.cs:
[assembly: ExportRenderer(typeof(MyWebView),typeof(MyWebVieWrenderer))]
namespace DPWCAM.Droid
{
class MyWebVieWrenderer : WebVieWrenderer
{
Activity mContext;
public MyWebVieWrenderer(Context context) : base(context)
{
this.mContext = context as Activity;
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
Control.Settings.JavaScriptEnabled = true;
Control.Settings.UserAgentString = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
Control.ClearCache(true);
Control.SetWebChromeClient(new MyWebClient(mContext));
}
public class MyWebClient : WebChromeClient
{
Activity mContext;
public MyWebClient(Activity context)
{
this.mContext = context;
}
[TargetApi(Value = 21)]
public override void OnPermissionRequest(PermissionRequest request)
{
mContext.RunOnUiThread(() => {
request.Grant(request.GetResources());
});
}
public override bool OnConsoleMessage(ConsoleMessage consoleMessage)
{
var message = consoleMessage.Message();
return base.OnConsoleMessage(consoleMessage);
}
}
}
}
MyWebView.cs:
public class MyWebView : WebView
{
}
WebViewPage.xaml:
<StackLayout>
<Entry x:Name="CameraName"></Entry>
<Button x:Name="Navigate" Clicked="NavigateButton_Clicked" Text="Save"></Button>
<dpwcam:MyWebView
x:Name="webView"
HeightRequest="500"
WidthRequest="500"/>
</StackLayout>
WebViewPage.xaml.cs:
void NavigateButton_Clicked(object sender,EventArgs args)
{
_cameraName = CameraName.Text;
webView.source = $"https://cam.AnyDomain.com.tr?Name={_cameraName}";
}
然后,我开始使用Google搜索来寻找答案,但没有找到适合我的情况的解决方案。我找到的所有答案都是关于我已经做过的权限
那怎么了?谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。