当前位置: 首页 > 知识库问答 >
问题:

众星二维码扫描仪与webview集成

李意致
2023-03-14

我正在尝试将Zstar二维码扫描仪与我的android webview应用程序集成。我成功导入了一个zstar项目并部署了它。扫描仪工作正常,没有任何问题。现在我正在尝试将此扫描仪与我的webview集成。

我正在研究的方案是,“当用户打开应用程序时,它应该启动webview,在webview中会有一个名为“扫描”的链接,单击该链接时,它应该向本机java代码“Zxing scanner function”发送意图,以启动扫描仪并关闭webview。扫描完成后,解码的数据应该传递到webview,扫描仪页面应该关闭,webview应该重新打开。

这是我到目前为止制定的代码

主活动。Java

package com.androiddvlpr.zxingandroid;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import androidx.annotation.NonNull;

import com.budiyev.android.codescanner.CodeScanner;
import com.budiyev.android.codescanner.CodeScannerView;
import com.budiyev.android.codescanner.DecodeCallback;
import com.google.zxing.Result;



public class MainActivity extends AppCompatActivity {

    private CodeScanner mCodeScanner;
    private WebView webView;




    private class WebChromeClientDemo extends WebChromeClient {
        private WebChromeClientDemo() {
        }
    }
    private class WebViewClientDemo extends WebViewClient {
        private WebViewClientDemo() {
        }

        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }


    @SuppressLint({"SetJavaScriptEnabled"})
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.webView = (WebView) findViewById(R.id.simpleWebView);
        this.webView.setWebViewClient(new WebViewClientDemo());
        this.webView.setWebChromeClient(new WebChromeClientDemo());
        this.webView.addJavascriptInterface(new WebAppInterface(this), "Android");
        WebSettings settings = this.webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDomStorageEnabled(true);
        settings.setDatabaseEnabled(true);
        CookieManager.getInstance();
        this.webView.loadUrl("https://mbracecloud.com/camera1.php");


        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA)
                == PackageManager.PERMISSION_DENIED){
            ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.CAMERA}, 123);
        } else {
           //startScanning();
        }
    }
    
    public void startScanning() {
        CodeScannerView scannerView = findViewById(R.id.scanner_view);
        mCodeScanner = new CodeScanner(this, scannerView);
        mCodeScanner.setDecodeCallback(new DecodeCallback() {
            @Override
            public void onDecoded(@NonNull final Result result) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, result.getText(), Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });
        scannerView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mCodeScanner.startPreview();
            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 123) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "Camera permission granted", Toast.LENGTH_LONG).show();
                startScanning();
            } else {
                Toast.makeText(this, "Camera permission denied", Toast.LENGTH_LONG).show();
            }
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
            if(mCodeScanner != null) {
                mCodeScanner.startPreview();
            }
    }

    @Override
    protected void onPause() {
        if(mCodeScanner != null) {
            mCodeScanner.releaseResources();
        }
        super.onPause();
    }
}

Activity\u Main。xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.budiyev.android.codescanner.CodeScannerView
        android:id="@+id/scanner_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:autoFocusButtonColor="@android:color/white"
        app:autoFocusButtonVisible="true"
        app:flashButtonColor="@android:color/white"
        app:flashButtonVisible="true"
        app:frameColor="@android:color/white"
        app:frameCornersSize="50dp"
        app:frameCornersRadius="0dp"
        app:frameAspectRatioWidth="1"
        app:frameAspectRatioHeight="1"
        app:frameSize="0.75"
        app:frameThickness="2dp"
        app:maskColor="#77000000"/>

    <WebView
        android:id="@+id/simpleWebView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true" />

</android.support.constraint.ConstraintLayout>

任何帮助都将非常感谢,因为我们坚持这一天将近一个月。

共有1个答案

符棋
2023-03-14

WebChromeClientDemo类中,添加

@Override
public void onPermissionRequest(PermissionRequest request) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        request.grant(request.getResources());
    }
}
 类似资料:
  • 我集成了Zxing QR扫描仪库。这是我的应用程序/版本。格拉德尔 在方法中,我有 所以,当应用程序启动时,冲洗灯打开。然后我按下“启动QR扫描仪”按钮,启动QR扫描仪,我得到了预期的解析结果。 这是用于解析二维码的代码: 我的问题是: ZXing QR扫描仪会自动关闭闪光灯(我的要求是在黑暗环境中扫描,因此必须有灯光) 我还发布了日志的一部分: 我怎样才能保持齐平灯打开?

  • 我正在为平板电脑开发一个android应用程序(SynchroDigital iNOSP10-4.0 RES型号),我想使用ZXing库扫描包含字符串的QRcode。它会在我需要时启动扫描仪,但我无法扫描任何东西。 实际上,如果我直接使用条形码扫描仪应用程序,它甚至不起作用,黄色的点出现了,但什么也没有发生,无论亮度、距离或二维码的复杂性(尝试使用一个只包含字母“a”的巨大二维码),它都不会起作用

  • 我有一个简单的代码,计划扫描二维码并将值返回给用户: 现在我知道我需要将src/com.google.zxing.client.*文件夹放在这个项目的某个地方,但是在哪里?当我将其复制粘贴到我自己的src/文件夹时,它们都有错误,而这些错误在最初的Capureactive项目中并不存在。我该如何解决这个问题?

  • 我正在使用phonegap和JQM创建一个应用程序。我最近在我的应用程序上配置了条形码扫描仪。它工作得很好。但我有个问题。当我扫描二维码时,我不知道扫描完成后如何返回到我的应用程序。我安装了zxing库条形码扫描仪。

  • 我需要在android应用程序中生成和扫描二维码。我需要这个功能将一些密码转换为二维码,然后使用二维码扫描仪扫描二维码中的密码,以便我可以验证它。我搜索并了解了zxing,但我不知道如何集成和使用它。如果有人能为如何将二维码扫描仪与android应用程序集成提供指导,我将不胜感激。

  • 我遵循这篇材料在Android中实现QRCode Scanner。 一步一步地,在我的应用程序中实现以下代码后,我在GingerreadOpenCameron aInterface.java类中收到错误。下面的图像是我面临的错误。 错误显示为: 以下是清单文件: 下面这个问题有人能帮我吗?