|
使用預設
開啟預設二維碼掃描介面:
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();
} |