QRCode二維碼掃描和生成
阿新 • • 發佈:2019-02-09
使用zxing的第三方抽取包,簡單的幾行程式碼就可以完成。
首先,下載第三方抽取包libzxing
將其按一個model匯入到我們建好的app中,新增model引用,新增許可權。
model倒入後的結構如圖:
注意:因為許可權問題,我們在主程式程式碼中有一大段是對許可權的請求,有註釋。
現在看程式碼:
首先是佈局檔案:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" tools:context="com.devin.qrcodedemo.MainActivity"> <TextView android:id="@+id/txt_result" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_scan_qrcode" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="掃描二維碼" /> <EditText android:id="@+id/et_code" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_gen" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="生成二維碼"/> <ImageView android:id="@+id/img_qrcode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/> </LinearLayout>
然後是主程式碼:
/** * 二維碼快速解析和生成 */ public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final int REQUEST_CODE = 0x0001;//請求碼 private static final int REQUEST_PERMISSION_CAMERA_CODE = 0x0001;//相機許可權請求碼 private Button btnScan;//啟動掃描 private Button btnGen;//生成二維碼 private TextView txtResult;//顯示返回的掃描結果 private EditText etCode;//生成二維碼的文字 private ImageView imgQRCode;//顯示生成的二維碼影象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); checkPermission(); } /** * 檢查許可權 */ private void checkPermission() { //獲得攝像頭許可權狀態 int permissionCamera = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA); //如果沒有許可權 if (permissionCamera != PackageManager.PERMISSION_GRANTED) { //請求許可權 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_PERMISSION_CAMERA_CODE); } else { initListener(); } } /** * 請求許可權 * * @param requestCode * @param permissions * @param grantResults */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_PERMISSION_CAMERA_CODE) { if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) { initListener(); } } } /** * 初始化 */ private void initView() { btnScan = (Button) findViewById(R.id.btn_scan_qrcode); btnGen = (Button) findViewById(R.id.btn_gen); txtResult = (TextView) findViewById(R.id.txt_result); etCode = (EditText) findViewById(R.id.et_code); imgQRCode = (ImageView) findViewById(R.id.img_qrcode); } /** * 處理返回的掃描結果 * * @param requestCode * @param resultCode * @param data */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE) { if (resultCode == RESULT_OK) { //獲取到解析好的二維碼文字 String result = data.getExtras().getString("result"); txtResult.setText(result); } } } /** * 初始化按鈕點選監聽 */ private void initListener() { btnScan.setOnClickListener(this); btnGen.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_scan_qrcode: startSacn(); break; case R.id.btn_gen: startGen(); break; default: break; } } /** * 生成二維碼 */ private void startGen() { String content = etCode.getText().toString(); if ("".equalsIgnoreCase(content)){ Toast.makeText(this, "內容不能為空", Toast.LENGTH_SHORT).show(); }else { //呼叫工具類EncodingUtils生成二維碼圖片 Bitmap qrCode = EncodingUtils.createQRCode(content, 600, 600, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)); imgQRCode.setImageBitmap(qrCode); } } /** * 進入掃描介面 */ private void startSacn() { Intent intent = new Intent(this, CaptureActivity.class); startActivityForResult(intent, REQUEST_CODE); } }
就兩個檔案。很簡單。感謝開源庫的作者和做抽取的朋友。
如果對掃描框不滿意可以去修改。
看看效果: