在安卓应用中,如何在不显示地址栏的情况下让webview访问摄像头?

问题描述 投票:0回答:1

我正试图创建一个Android应用程序(Xamarin),它是一个网站的包装器。 该网站有一个功能,允许用户做一个QR扫描.我得到了它的工作使用WebChrome客户端。 然而,它在顶部显示地址栏。当我试图同时添加WebViewClient时,地址栏像我想要的那样消失了,但QR扫描(摄像头)不再工作。

在我的MainActivity.cs.AndroidManifest.xml中。


WebView web_view;
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    Xamarin.Essentials.Platform.Init(this, savedInstanceState);
    SetContentView(Resource.Layout.activity_main);

    web_view = FindViewById<WebView>(Resource.Id.webview);

    web_view.Settings.JavaScriptEnabled = true;
    web_view.Settings.DomStorageEnabled = true;
    web_view.Settings.AllowFileAccessFromFileURLs = true;
    web_view.Settings.AllowUniversalAccessFromFileURLs = true;
    web_view.Settings.SetPluginState(WebSettings.PluginState.On);
    web_view.Settings.MediaPlaybackRequiresUserGesture = false;
    web_view.SetWebViewClient(new WorkspaceDroidClient());  //With this line included, the QR scan no longer works
    web_view.SetWebChromeClient(new CustomChromeClient());
    web_view.LoadUrl("https://qrstuff.com/scan");
}
public class WorkspaceDroidClient : WebViewClient
{
    // For API level 24 and later
    public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
    {
        view.LoadUrl(request.Url.ToString());
        return false;
    }
}
public class CustomChromeClient : WebChromeClient
{
    public override void OnPermissionRequest(PermissionRequest request)
    {
        request.Grant(request.GetResources());
    }
}
public override bool OnCreateOptionsMenu(IMenu menu)
{
    MenuInflater.Inflate(Resource.Menu.menu_main, menu);
    return true;
}

public override bool OnOptionsItemSelected(IMenuItem item)
{
    int id = item.ItemId;
    if (id == Resource.Id.action_settings)
    {
        return true;
    }

    return base.OnOptionsItemSelected(item);
}

AndroidManifest.xml中有以下内容:


<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />

任何帮助将是非常感激的。

android xamarin mobile camera android-webview
1个回答
0
投票

那是因为默认的 WebViewClient 不支持QR扫描功能的网站.而且我认为它不可能删除URL栏,除非你调用JS代码。这不是一个友好的解决方案。

如果你只是在Android中实现QR扫描,就没有必要在WebView上加载第三方网站。你可以安装插件 ZXing.Net.Mobile 从nuget到你的项目。

使用方法

buttonScan.Click += (sender, e) => {

    #if __ANDROID__
    // Initialize the scanner first so it can track the current context
    MobileBarcodeScanner.Initialize (Application);
    #endif
    
    var scanner = new ZXing.Mobile.MobileBarcodeScanner();

    var result = await scanner.Scan();

    if (result != null)
        Console.WriteLine("Scanned Barcode: " + result.Text);
};

更多详情可参考 https:/github.comRedthZXing.Net.Mobile。 .

© www.soinside.com 2019 - 2024. All rights reserved.