使用預設 開啟預設二維碼掃描介面: Intent intent = new Intent(getApplication(), CaptureActivity.class); startActivityForResult(intent, REQUEST_CODE); 接受結果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent 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) { String result = bundle.getString(CodeUtils.RESULT_STRING); tvScanMsg.setText(result); Toast.makeText(this, "解析結果:" + result, Toast.LENGTH_LONG).show(); } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) { Toast.makeText(mContext, "解析二維碼失敗", Toast.LENGTH_LONG).show(); } } } } 自訂方式 添加CaptureFragment替換掃描布局地區 captureFragment = new CaptureFragment(); // 為二維碼掃描介面設定定製化介面 CodeUtils.setFragmentArgs(captureFragment, R.layout.scan_area_layout); captureFragment.setAnalyzeCallback(analyzeCallback); getSupportFragmentManager().beginTransaction().replace(R.id.fl_scan_area, captureFragment).commit(); 自訂掃描布局 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="fill_parent" > <SurfaceView android:id="@+id/preview_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.uuzuche.lib_zxing.view.ViewfinderView android:id="@+id/viewfinder_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:inner_width="200dp" app:inner_height="200dp" app:inner_margintop="25dp" app:inner_corner_color="@color/red" app:inner_corner_length="30dp" app:inner_corner_width="5dp" app:inner_scan_bitmap="@drawable/scan_image" app:inner_scan_speed="10" app:inner_scan_iscircle="false" /> </FrameLayout> 掃描結果回調的處理 /** * 二維碼解析回呼函數 */ CodeUtils.AnalyzeCallback analyzeCallback = new CodeUtils.AnalyzeCallback() { @Override public void onAnalyzeSuccess(Bitmap mBitmap, String result) { FwLog.d(result); onScanFinish(result); } @Override public void onAnalyzeFailed() { FwLog.d("failed..."); onScanFinish(""); } }; private void onScanFinish(String result){ Intent resultIntent = new Intent(); Bundle bundle = new Bundle(); bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_SUCCESS); bundle.putString(CodeUtils.RESULT_STRING, result); resultIntent.putExtras(bundle); setResult(RESULT_OK, resultIntent); finish(); } |