一个二维码被扫描后会有一些信息,但是这些信息会不一样,比如有的是文字,有的是图片,有的是网页之类的,今天,我做的是一个文字与网页的判断,其它的判断各位大佬要是想加也可以自己加,好了,上代码:
首先权限少不了
<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控件,用来显示网页的,
这样的话,也就搞定了,
写的不好,希望各位大佬多多指教!