Zxing框架实现二维码和跳转到webview

1.activity_main.xml布局页

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/scanning_code"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="扫瞄二维码"
        />
    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/generate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="生成二维码"
        android:layout_marginBottom="20dp"/>
    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"
        android:layout_gravity="center"
        />
</LinearLayout>

2.MainActivity页面

package com.example.day_05_qrcoad;

import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import java.lang.ref.WeakReference;

import cn.bingoogolapple.qrcode.zxing.QRCodeEncoder;

public class MainActivity extends AppCompatActivity {

    private Button button;
    private Button generate;
    private EditText editText;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取资源id
        //扫描二维码
        button = findViewById(R.id.scanning_code);
        //生成二维码
        generate = findViewById(R.id.generate);
        editText = findViewById(R.id.edit);
        imageView = findViewById(R.id.image);
        //扫描二维码
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //扫描二维码
                Coadscanning();
            }
        });
        //生成二维码
        generate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //生成二维码
                createQRCode();
            }
        });
    }
    //扫描二维码
    private void Coadscanning() {
        //第一步,判断系统版本是否为6.0以上
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
            //第二步:checkSelfPermission判断有没有此权限
            //第一个参数:上下文
            //第二个参数:我们想要判断的权限,此处为相机权限
            //PackageManager.PERMISSION_GRANTED 条件,权限有没有被授予
            if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
                //如果没授予,则申请权限
                //第一个:上下文
                //第二个:要申请的权限数组,此处为相机权限
                //第三个:请求码,startActivityForResult一样
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA},100);
            }else if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.INTERNET},100);
            }else{
                //跳转
                Intent intent = new Intent(MainActivity.this,CoadActivity.class);
                startActivity(intent);
            }
        }else{
            //跳转
            Intent intent = new Intent(MainActivity.this,CoadActivity.class);
            startActivity(intent);
        }
    }
    /**
     * 接受权限请求结果
     * @param requestCode 请求码
     * @param permissions 我们请求的权限数组
     * @param grantResults 返回结果数组
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 100 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
            //如果requestCode匹配,切权限申请通过
            startActivity(new Intent(MainActivity.this, CoadActivity.class));
        }
    }
    //生成二维码
    private void createQRCode() {
        QRTask qrTask = new QRTask(this, imageView, editText);
        qrTask.execute(editText.getText().toString());
    }
    public static class QRTask extends AsyncTask<String,Void,Bitmap>{
        private WeakReference<Context> mContext;
        private WeakReference<ImageView> mImageView;
        public QRTask(Context context, ImageView image, EditText ed) {
            mContext = new WeakReference<>(context);
            mImageView = new WeakReference<>(image);
        }
        @Override
        protected Bitmap doInBackground(String... strings) {
            String str = strings[0];
            if(TextUtils.isEmpty(str)){
                return null;
            }
            int size = mContext.get().getResources().getDimensionPixelOffset(R.dimen.qr_code_size);
            return QRCodeEncoder.syncEncodeQRCode(str,size);
        }
        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if (bitmap != null) {
                mImageView.get().setImageBitmap(bitmap);
            } else {
                Toast.makeText(mContext.get(), "生成失败", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

3.二维码扫描框页面布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <cn.bingoogolapple.qrcode.zxing.ZXingView
        android:id="@+id/viewzxing"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</android.support.constraint.ConstraintLayout>

4.二维码扫描框代码页面

package com.example.day_05_qrcoad;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import cn.bingoogolapple.qrcode.core.QRCodeView;
import cn.bingoogolapple.qrcode.zxing.ZXingView;

public class CoadActivity extends AppCompatActivity implements QRCodeView.Delegate {

    private ZXingView zXingView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_coad);
        //获取资源id
        zXingView = findViewById(R.id.viewzxing);
        zXingView.setDelegate(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        //打开后置摄像头
        zXingView.startCamera();
        //延迟0.1秒
        zXingView.startSpotAndShowRect();
        //闪光灯
        //zXingView.openFlashlight();
    }

    @Override
    protected void onStop() {
        super.onStop();
        //关闭摄像头
        zXingView.stopCamera();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //销毁
        zXingView.onDestroy();
    }

    @Override
    public void onScanQRCodeSuccess(String result) {
        Log.i("GXY",result);
        Intent intent = new Intent(CoadActivity.this,WebActivity.class);
        intent.putExtra("path",result);
        startActivity(intent);
    }

    @Override
    public void onCameraAmbientBrightnessChanged(boolean isDark) {

    }

    @Override
    public void onScanQRCodeOpenCameraError() {
        Log.i("GXY","打开相机出错");
    }
}

5.条转webview页面布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <WebView
        android:id="@+id/web"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </WebView>
</android.support.constraint.ConstraintLayout>

6.WebActivity展示内容页面

package com.example.day_05_qrcoad;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebActivity extends AppCompatActivity {

    private WebView webView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview);
        //获取资源id
        webView = findViewById(R.id.web);
        //接收值
        Intent intent = getIntent();
        String path = intent.getStringExtra("path");
        //支持js语言
        webView.getSettings().setJavaScriptEnabled(true);
        //展示字符串
        //webView.loadDataWithBaseURL(null,path,"text/html","utf-8",null);
        //webVew去加载网页
        webView.loadUrl(path);
    }
}

7.生产二维码是显示二维码的大小dimens.xml页面

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="qr_code_size">200dp</dimen>
</resources>

8.二维码需要的依赖

implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.4'

9.二维码需要的权限

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

10.修改后动态配置权限

package com.example.guoxinyu20181204;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Magnifier;

public class MainActivity extends AppCompatActivity {

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        //获取资源id
        button = findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                codeCanning();
            }
        });
    }

    private void codeCanning() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            //添加相机权限
            if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) !=
                    PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, 100);
            } else {
                Intent intent = new Intent(MainActivity.this, CodeActivity.class);
                startActivity(intent);
            }
            //添加网络权限
            if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.INTERNET) !=
                    PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.INTERNET}, 200);
            } else {
                Intent intent = new Intent(MainActivity.this, CodeActivity.class);
                startActivity(intent);
            }
        } else {
            Intent intent = new Intent(MainActivity.this, CodeActivity.class);
            startActivity(intent);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 100 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Intent intent = new Intent(MainActivity.this, CodeActivity.class);
            startActivity(intent);
        } else if (requestCode == 200 && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
            Intent intent = new Intent(MainActivity.this, CodeActivity.class);
            startActivity(intent);
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Delphi ZXing是一款基于ZXing库的开源二维码识别工具。要实现批量识别二维码,我们可以按照以下步骤进行操作: 1. 导入ZXing库:首先,需要下载并导入ZXing库到Delphi中,可以从GitHub或其他资源站点获取。将库文件添加到Delphi项目中。 2. 创建批量识别功能:在Delphi中,我们可以使用循环结构来实现批量处理。例如,可以使用一个循环来遍历包含二维码图片文件名的文件夹。 3. 加载图片并识别二维码:使用ZXing库提供的API,可以加载每个图片文件并进行二维码识别。可以通过将每个图片文件的路径传递给ZXing函数来实现。识别结果可以是文本形式或其他格式,取决于所选择的函数。 4. 处理识别结果:每次识别完成后,可以将结果保存到一个集合或数组中,以便进一步处理或显示。可以根据具体需求选择保存方式。 5. 显示或处理结果:可以根据需要将结果展示在界面上,例如在列表框或字符串列表中。还可以将结果导出到文本文件或数据库中进行进一步处理。 需要注意的是,ZXing库对二维码图片的清晰度和质量有一定要求。为了提高识别准确率,建议使用高分辨率、清晰度较高的图片。 总结来说,使用Delphi ZXing实现批量识别二维码的基本步骤包括导入库、创建批量处理功能、加载和识别图片、处理识别结果以及展示或保存结果。具体实现可以根据项目需求和开发者的经验进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值