Tạo ô Cài đặt nhanh thanh toán bằng mã QR

Cài đặt nhanh là các ô xuất hiện trong bảng điều khiển Cài đặt nhanh. Người dùng có thể nhấn vào các thẻ thông tin này để nhanh chóng hoàn tất các việc cần làm định kỳ. Tài liệu này hướng dẫn bạn cách tạo một ô tuỳ chỉnh trong trình đơn Cài đặt nhanh cho mã QR thanh toán.

Trước khi tiếp tục, hãy đảm bảo rằng bạn đã nắm rõ các hướng dẫn chung và các phương pháp để tạo thẻ thông tin tuỳ chỉnh trong trình đơn Cài đặt nhanh cho ứng dụng.

Để tạo thẻ thông tin, hãy làm theo các bước sau:

  1. Tạo biểu tượng tuỳ chỉnh.
  2. Tạo và khai báo TileService.

  3. Để mở giao dịch thanh toán bằng mã QR, hãy điền vào phương thức onClick(). Nhấn và giữ thẻ thông tin sẽ nhắc người dùng truy cập vào màn hình Thông tin ứng dụng. Để ghi đè hành vi này và thay vào đó hãy khởi chạy một hoạt động cho các lựa chọn ưu tiên về chế độ cài đặt, hãy thêm một <intent-filter> đến một trong các hoạt động của bạn bằng ACTION_QS_TILE_PREFERENCES.

    Kotlin

    import android.service.quicksettings.TileService
    
    // Called when the user taps on your tile in an active or inactive state.
    override fun onClick() {
       // Create Intent, replace MainActivity::class.java with QR Code Activity
       val intent = Intent(this, MainActivity::class.java)
       // Create PendingIntent
       val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)
       if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
         startActivityAndCollapse(pendingIntent)
       } else {
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
         startActivityAndCollapse(intent)
       }
    }
    

    Java

    import android.service.quicksettings.TileService;
    
    // Called when the user taps on your tile in an active or inactive state.
    @Override
    public void onClick() {
     // Create Intent, replace MainActivity.class with QR Code Activity
     Intent intent = new Intent(MyQSTileService.this, MainActivity.class);
     // Create PendingIntent
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
     if (VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE) {
       startActivityAndCollapse(pendingIntent);
     } else {
       intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       startActivityAndCollapse(intent);
     }
    }
    
  4. Để bảo vệ thông tin thanh toán nhạy cảm, chỉ thực hiện những hành động an toàn trên thiết bị đã khoá an toàn.

    Kotlin

    import android.service.quicksettings.TileService
    
    override fun onClick() {
       val intent = Intent(this, MainActivity::class.java)
       val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)
    
       // ...
    
       if (isSecure()) {
           startActivityAndCollapse(pendingIntent)
       } else {
           unlockAndRun {
               startActivityAndCollapse(pendingIntent)
           }
       }
       // ...
    }
    

    Java

    import android.service.quicksettings.TileService;
    
    @Override
    public void onClick() {
     Intent intent = new Intent(MyQSTileService.this, MainActivity.class);
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
     ...
     if (isSecure()) {
       startActivityAndCollapse(pendingIntent);
     } else {
       unlockAndRun(new Runnable() {
         @Override
         public void run() {
           startActivityAndCollapse(pendingIntent);
         }
       });
      }
     ...
    }
    
  5. Khi giới thiệu tính năng này lần đầu tiên, hãy nhắc người dùng thêm thẻ thông tin.