Android 利用Zxing实现扫描二维码并跳转详情页面
2017-12-18 20:33
671 查看
一言不合就上图
因为是第三方集成好的所以|||
老套路首先注入依赖:
//zxing二维码 compile 'cn.yipianfengye.android:zxing-library:2.1'
Manifest注册清单里面添加打开相机的权限:
<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.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" />
然后是activity_main.xml布局文件,随便给个控件,为了触发点击事件(点击打开相机):
<TextView android:id="@+id/tvSys" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点我扫一扫" android:textSize="22sp"/>
然后新建一个zxing_webview_layout.xml布局文件,用来跳转显示二维码的详情:
<EditText android:id="@+id/receptionTv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" /> <WebView android:id="@+id/wb" android:layout_width="match_parent" android:layout_height="match_parent"></WebView>
然后一个重点 需要新建一个类继承application,初始化zxing包:
public class ZXingApplication extends Application { //oncreate方法 @Override public void onCreate() { super.onCreate(); //初始化ZXING包 ZXingLibrary.initDisplayOpinion(this); } }
千万不要忘记在ManiFast注册清单里面声明一下application类:
<application android:name=".ZXingApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.AppCompat.Light.NoActionBar"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> //这是跳转到详情页面也别忘记,声明此类 <activity android:name=".ZXingActivity" /> </application>
然后就是MainActivity的代码:
public class MainActivity extends AppCompatActivity { //定义一个全局的静态常量 private static final int REQUEST_CODE = 001; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //运动时权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { //申请WRITE_EXTERNAL_STORAGE权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 1); } //找控件 TextView tvSys = (TextView) findViewById(R.id.tvSys); //点击事件 tvSys.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //调用系统相机功能,就是跳转到摄像头的界面 Intent intent = new Intent(MainActivity.this, CaptureActivity.class); //用此方法跳转的原因是:为了回调下面onActivityResult的方法 startActivityForResult(intent, REQUEST_CODE); } }); } //扫描回传值 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE) { Bundle bundle = data.getExtras(); if (bundle == null) { return; } if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) { //这是拿到解析扫描到的信息,并转成字符串 String result = bundle.getString(CodeUtils.RESULT_STRING); Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show(); //解析扫到的二维码后就跳转页面 Intent intent = new Intent(MainActivity.this, ZXingActivity.class); //把扫到并解析到的信息(既:字符串)带到详情页面 intent.putExtra("path", result); startActivity(intent); } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) { //否则土司解析二维码失败 Toast.makeText(this, "解析二维码失败:", Toast.LENGTH_LONG).show(); } } } }
然后就是跳转详情的页面也就是ZXingActivity类:
public class ZXingActivity extends Activity { //控件设了个全局 private WebView wb; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.zxing_webview_layout); //找控件 wb = findViewById(R.id.wb); TextView receptionTv = findViewById(R.id.receptionTv); //支持js语言 wb.getSettings().setJavaScriptEnabled(true); // 缩放至屏幕的大小 wb.getSettings().setLoadWithOverviewMode(true); //支持缩放 wb.getSettings().setSupportZoom(true); //声明一个Intent意图,用来接受MainActivity传过来的值 Intent intent = getIntent(); //拿到MainActivity传过来的值并返回一个字符串, //口令要一致 String jxString = intent.getStringExtra("path"); //把字符串赋值给输入框 receptionTv.setText(jxString); //webVew去加载网页 wb.loadUrl(jxString); //设置用自己的浏览器打开 wb.setWebViewClient(new MyWebViewClient()); //设置它的进度 /*wb.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); //拿到当前进度的int值 } }); }*/ //是否允许返回 /* @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && wb.canGoBack()) { //让webView返回上一级 wb.goBack(); } return true; }*/ //自定义浏览器 class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return super.shouldOverrideUrlLoading(view, url); } } //预防内存泄露 @Override protected void onPause() { super.onPause(); finish(); } }
完事儿
强调几点:1我的Android studio是2.3.3版本,SDK下-v7:26.+’
compile 'com.android.support:appcompat-v7:26.+'
相关文章推荐
- Android 利用精简Zxing实现条形码/二维码 扫描
- Android基于google ZXing的简化版BarCodeTest实现二维码的扫描及简单的网页跳转
- 高仿仿微信界面二维码扫描效果 之 Android 基于google Zxing实现二维码、条形码扫描
- Android--基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- Android平台下利用zxing实现二维码开发
- android开发(17) 扫描二维码 - 调用第三方APK来实现二维码扫描,参考自 开源项目zxing
- android 利用ZXING扫描二维码代码分析
- Android:基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- Android平台下利用zxing实现二维码开发
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- 在Android中使用 Google ZXing 实现二维码、条形码扫描
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- 在Android中使用 Google ZXing 实现二维码、条形码扫描
- Android平台下利用zxing实现二维码开发
- Android平台下利用zxing实现二维码开发