扫码识别文字与网页

一个二维码被扫描后会有一些信息,但是这些信息会不一样,比如有的是文字,有的是图片,有的是网页之类的,今天,我做的是一个文字与网页的判断,其它的判断各位大佬要是想加也可以自己加,好了,上代码:

首先权限少不了

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

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

然后就是一个zxing的依赖包

compile 'cn.yipianfengye.android:zxing-library:2.1'

最后就是一些逻辑操作,

首先看一下MainActivity,

package com.example.dell.myapplication1;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.uuzuche.lib_zxing.activity.CaptureActivity;
import com.uuzuche.lib_zxing.activity.CodeUtils;
import com.uuzuche.lib_zxing.activity.ZXingLibrary;

public class MainActivity extends AppCompatActivity {
    String TAG = "MainActivity";
    int REQUEST_CODE = 1;

    TextView textView;
    private String result;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取摄像头权限
        getCameraPermission();
        //ZXingLibrary初始化
        ZXingLibrary.initDisplayOpinion(this);
        //控件初始化
        textView = (TextView)findViewById(R.id.text);
        Button qrButton = (Button)findViewById(R.id.qrcode);
        qrButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
                startActivityForResult(intent, REQUEST_CODE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE) {
            //处理扫描结果(在界面上显示)
            if (null != data) {
                Bundle bundle = data.getExtras();
                if (bundle == null) {
                    return;
                }
                if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
                    result = bundle.getString(CodeUtils.RESULT_STRING);
                    Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show();
                    //判断解析的结果是什么类型的
                    if ( Patterns.WEB_URL.matcher(result).matches()) {
                        //符合标准
                        //解析扫到的二维码后就跳转页面
                        Intent intent = new Intent(MainActivity.this, WebviewActivity.class);
                        //把扫到并解析到的信息(既:字符串)带到详情页面
                        intent.putExtra("path", result);
                        startActivity(intent);
                    } else{
                        //不符合标准
                        //显示文字,并赋值
                        Log.e(TAG,"解析结果:" + result);
                        textView.setText(result);//解析结果显示在TextView
                    }
                } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
                    Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
                }
            }
        }
    }

    public void getCameraPermission()
    {
        if (Build.VERSION.SDK_INT>22){
            if (ContextCompat.checkSelfPermission(MainActivity.this,
                    android.Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED){
                //先判断有没有权限 ,没有就在这里进行权限的申请
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{android.Manifest.permission.CAMERA},2);
            }else {
                //说明已经获取到摄像头权限了 想干嘛干嘛

            }
        }else {
            //这个说明系统版本在6.0之下,不需要动态获取权限。
        }
    }
}

过程不多说了,毕竟注释写的很清楚了,这个xml就不复制了,里面就是一个按钮和一个TextView而已,主要就是这个网页与文字的判断,

//判断解析的结果是什么类型的
if ( Patterns.WEB_URL.matcher(result).matches()) {
    //符合标准
    //解析扫到的二维码后就跳转页面
    Intent intent = new Intent(MainActivity.this, WebviewActivity.class);
    //把扫到并解析到的信息(既:字符串)带到详情页面
    intent.putExtra("path", result);
    startActivity(intent);
} else{
    //不符合标准
    //显示文字,并赋值
    Log.e(TAG,"解析结果:" + result);
    textView.setText(result);//解析结果显示在TextView
}

判断是不是符合标准的,是的话就跳转网页,不符合就是文字,当然,这个判断你也可以自己做,也就是判断解析的数据是不是HTTPS,或者其它有关网页的东西,判断就行,

接下来就是网页的类了,这个就比较简单了,

package com.example.dell.myapplication1;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebviewActivity extends AppCompatActivity {

    private WebView wb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview);
        wb = findViewById(R.id.wb);
        //支持js语言
        wb.getSettings().setJavaScriptEnabled(true);
        // 缩放至屏幕的大小
        wb.getSettings().setLoadWithOverviewMode(true);
        //支持缩放
        wb.getSettings().setSupportZoom(true);
        //声明一个Intent意图,用来接受MainActivity传过来的值
        Intent intent = getIntent();
        //拿到MainActivity传过来的值并返回一个字符串,
        //口令要一致
        String jxString = intent.getStringExtra("path");
        //webVew去加载网页
        wb.loadUrl(jxString);
    }


}

这个xml也就不复制了,只有一个webview控件,用来显示网页的,

这样的话,也就搞定了,

写的不好,希望各位大佬多多指教!

猜你喜欢

转载自blog.csdn.net/nyb521/article/details/79359447