全部产品

标准 UI 下使用扫码功能

更新时间:2020-09-16 17:32:16

本文将引导您将标准 UI 扫码的能力添加到工程中,并介绍如何设置扫码界面的 Title。

标准 UI 下使用扫一扫

  1. 打开 Android Studio 在 activity_main.xml 文件中,重新设置 Button 样式并修改 Button 的 id 为 standard_ui_btn

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:app="http://schemas.android.com/apk/res-auto"
    4. xmlns:tools="http://schemas.android.com/tools"
    5. android:layout_width="match_parent"
    6. android:layout_height="match_parent"
    7. tools:context=".MainActivity">
    8. <Button
    9. android:id="@+id/standard_ui_btn"
    10. android:layout_width="match_parent"
    11. android:layout_height="wrap_content"
    12. android:layout_marginTop="48dp"
    13. android:background="#108EE9"
    14. android:gravity="center"
    15. android:text="标准 UI 下使用扫一扫"
    16. android:textColor="#ffffff"
    17. app:layout_constraintEnd_toEndOf="parent"
    18. app:layout_constraintHorizontal_bias="0.498"
    19. app:layout_constraintStart_toStartOf="parent"
    20. app:layout_constraintTop_toTopOf="parent" />
    21. </androidx.constraintlayout.widget.ConstraintLayout>
  2. MainActivity 类重写点击按钮事件,通过点击按钮实现扫码功能。代码如下所示:

    1. private ScanRequest scanRequest = new ScanRequest();
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_main);
    6. findViewById(R.id.standard_ui_btn).setOnClickListener(new View.OnClickListener(){
    7. @Override
    8. public void onClick(View v) {
    9. MPScan.startMPaasScanActivity(MainActivity.this, scanRequest, new ScanCallback() {
    10. @Override
    11. public void onScanResult(final boolean isProcessed, final Intent result) {
    12. if (!isProcessed) {
    13. // 扫码界面点击物理返回键或左上角返回键
    14. return;
    15. }
    16. // 注意:本回调是在子线程中执行
    17. runOnUiThread(new Runnable() {
    18. @Override
    19. public void run() {
    20. if (result == null || result.getData() == null) {
    21. // 扫码失败
    22. Toast.makeText(MainActivity.this, "扫码失败,请重试!", Toast.LENGTH_SHORT).show();
    23. return;
    24. }
    25. // 扫码成功
    26. new AlertDialog.Builder(MainActivity.this)
    27. .setMessage(result.getData().toString())
    28. .setPositiveButton(R.string.confirm, null)
    29. .create()
    30. .show();
    31. }
    32. });
    33. }
    34. });
    35. }
    36. });
    37. }
  3. 在工程的 AndroidManifest.xml 中添加读写权限和网络访问权限。
    1. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    2. <uses-permission android:name="android.permission.INTERNET" />
  4. 在工程主 Module 下的 build.gradle(:app) 中添加以下配置:
    34
  5. 编译并运行工程后在手机上安装应用。打开应用后界面如下:
  6. 点击 标准 UI 下使用扫一扫 即可使用标准 UI 下的扫码功能。
  7. 扫描如下二维码,界面会弹出该二维码的信息
    1

设置扫码界面 Title

  1. activity_main.xml 文件中,添加 Button,并设置 Button 的 id 为 btn_title
    1. <Button
    2. android:id="@+id/btn_title"
    3. android:layout_width="match_parent"
    4. android:layout_height="wrap_content"
    5. android:layout_marginTop="128dp"
    6. android:background="#108EE9"
    7. android:gravity="center"
    8. android:text="标准 UI 下设置扫码界面 Title"
    9. android:textColor="#ffffff"
    10. app:layout_constraintEnd_toEndOf="parent"
    11. app:layout_constraintHorizontal_bias="0.0"
    12. app:layout_constraintStart_toStartOf="parent"
    13. app:layout_constraintTop_toTopOf="parent" />
  2. com.example.scanapplication 包中创建 DialogUtil 类。
    15
  3. DialogUtil 类中设置扫码界面样式。

    1. public interface PromptCallback {
    2. void onConfirm(String msg);
    3. }
    4. public static void prompt(Activity activity, final PromptCallback callback) {
    5. final EditText edit = new EditText(activity);
    6. new AlertDialog.Builder(activity)
    7. .setTitle("输入文字")
    8. .setView(edit)
    9. .setPositiveButton("确定"
    10. , new DialogInterface.OnClickListener() {
    11. @Override
    12. public void onClick(DialogInterface dialog, int which) {
    13. if (callback != null) {
    14. String text = edit.getText().toString().trim();
    15. callback.onConfirm(text);
    16. }
    17. dialog.dismiss();
    18. }
    19. })
    20. .setNegativeButton("取消", new DialogInterface.OnClickListener() {
    21. @Override
    22. public void onClick(DialogInterface dialog, int which) {
    23. dialog.dismiss();
    24. }
    25. })
    26. .create()
    27. .show();
    28. }

    16

  4. MainActivity 类中编写代码。通过点击 btn_title 按钮实现设置扫码界面 Title 的功能。代码如下所示:
    1. findViewById(R.id.btn_title).setOnClickListener(new View.OnClickListener() {
    2. @Override
    3. public void onClick(View v) {
    4. DialogUtil.prompt(MainActivity.this, new DialogUtil.PromptCallback() {
    5. @Override
    6. public void onConfirm(String msg) {
    7. scanRequest.setTitleText(msg);
    8. }
    9. });
    10. }
    11. });
  5. 编译工程后,在手机上安装应用。打开应用后界面如下:
  6. 点击 标准 UI 下设置扫码界面 Title,输入您要显示的 Title 信息,这里输入 mPaaS,点击 确定

  7. 点击 标准 UI 下使用扫一扫,扫码页面左上角的 Title 显示第 6 步输入的 Title 信息,标准 UI 下设置扫码 Title 成功。