สร้างการ์ดการตั้งค่าด่วนที่กำหนดเองสำหรับแอป

การตั้งค่าด่วนคือการ์ดที่แสดงในแผงการตั้งค่าด่วน ซึ่งแสดงถึงการดำเนินการที่ผู้ใช้แตะเพื่อทำงานที่ทำซ้ำๆ ให้เสร็จอย่างรวดเร็ว แอปของคุณสามารถแสดงการ์ดที่กำหนดเองแก่ผู้ใช้ผ่านคลาส TileService และใช้ออบเจ็กต์ Tile เพื่อติดตามสถานะของการ์ด เช่น คุณสามารถสร้างการ์ดที่ช่วยให้ผู้ใช้เปิดหรือปิด VPN ที่แอปของคุณให้บริการได้

แผงการตั้งค่าด่วนที่มีการ์ด VPN เปิดและปิดอยู่
รูปที่ 1 แผงการตั้งค่าด่วนที่มีการ์ด VPN เปิด และปิดอยู่

ตัดสินใจว่าจะสร้างการ์ดเมื่อใด

เราขอแนะนำให้สร้างการ์ดสำหรับฟังก์ชันการทำงานเฉพาะที่คุณคาดหวังว่าผู้ใช้จะเข้าถึงบ่อยๆ หรือต้องการเข้าถึงอย่างรวดเร็ว (หรือทั้ง 2 อย่าง) การ์ดที่มีประสิทธิภาพมากที่สุดคือการ์ดที่มีคุณสมบัติทั้ง 2 อย่างนี้ ซึ่งช่วยให้เข้าถึงการดำเนินการที่ทำบ่อยๆ ได้อย่างรวดเร็ว

ตัวอย่างเช่น คุณสามารถสร้างการ์ดสำหรับแอปฟิตเนสที่ช่วยให้ผู้ใช้เริ่มเซสชันการออกกำลังกายได้อย่างรวดเร็ว อย่างไรก็ตาม เราไม่แนะนำให้สร้างการ์ดสำหรับแอปเดียวกันที่ช่วยให้ผู้ใช้ดูประวัติการออกกำลังกายทั้งหมดได้

กรณีการใช้งานการ์ดแอปฟิตเนส
รูปที่ 2 ตัวอย่างการ์ดที่แนะนำและไม่แนะนำสำหรับแอปฟิตเนส

เราขอแนะนำให้หลีกเลี่ยงแนวทางปฏิบัติบางอย่างต่อไปนี้เพื่อช่วยปรับปรุงการค้นพบและการใช้งานการ์ดได้ง่ายขึ้น

  • หลีกเลี่ยงการใช้การ์ดเพื่อเปิดแอป ให้ใช้ทางลัดของแอปหรือตัวเปิดแอปมาตรฐาน แทน

  • หลีกเลี่ยงการใช้การ์ดสำหรับการดำเนินการของผู้ใช้แบบครั้งเดียว ให้ใช้ทางลัดของแอปหรือการ แจ้งเตือนแทน

  • หลีกเลี่ยงการสร้างการ์ดมากเกินไป เราขอแนะนำให้สร้างการ์ดไม่เกิน 2 รายการต่อแอป ให้ใช้ทางลัดของแอปแทน

  • หลีกเลี่ยงการใช้การ์ดที่แสดงข้อมูลแต่ผู้ใช้โต้ตอบไม่ได้ ให้ใช้การแจ้งเตือนหรือวิดเจ็ตแทน

สร้างการ์ด

หากต้องการสร้างการ์ด คุณต้องสร้างไอคอนการ์ดที่เหมาะสมก่อน จากนั้นสร้างและประกาศ TileService ในไฟล์ Manifest ของแอป

ตัวอย่างการตั้งค่าด่วนแสดงตัวอย่างวิธีสร้าง และจัดการการ์ด

สร้างไอคอนที่กำหนดเอง

คุณจะต้องระบุไอคอนที่กำหนดเองซึ่งจะแสดงในการ์ดในแผงการตั้งค่าด่วน (คุณจะเพิ่มไอคอนนี้เมื่อประกาศ TileService ซึ่งอธิบายไว้ในส่วนถัดไป) ไอคอนต้องเป็นสีขาวทึบที่มี พื้นหลังโปร่งใส ขนาด 24 x 24dp และอยู่ในรูปแบบ VectorDrawable

ตัวอย่าง Vector Drawable
รูปที่ 3 ตัวอย่าง Vector Drawable

สร้างไอคอนที่สื่อถึงวัตถุประสงค์ของการ์ดด้วยภาพ ซึ่งจะช่วยให้ผู้ใช้ระบุได้ง่ายว่าการ์ดของคุณตรงกับความต้องการหรือไม่ ตัวอย่างเช่น คุณอาจสร้างไอคอนนาฬิกาจับเวลาสำหรับการ์ดของแอปฟิตเนสที่ช่วยให้ผู้ใช้เริ่มเซสชันการออกกำลังกายได้

สร้างและประกาศ TileService

สร้างบริการสำหรับการ์ดที่ขยายคลาส TileService

Kotlin

class MyQSTileService: TileService() {

  // Called when the user adds your tile.
  override fun onTileAdded() {
    super.onTileAdded()
  }
  // Called when your app can update your tile.
  override fun onStartListening() {
    super.onStartListening()
  }

  // Called when your app can no longer update your tile.
  override fun onStopListening() {
    super.onStopListening()
  }

  // Called when the user taps on your tile in an active or inactive state.
  override fun onClick() {
    super.onClick()
  }
  // Called when the user removes your tile.
  override fun onTileRemoved() {
    super.onTileRemoved()
  }
}

Java

public class MyQSTileService extends TileService {

  // Called when the user adds your tile.
  @Override
  public void onTileAdded() {
    super.onTileAdded();
  }

  // Called when your app can update your tile.
  @Override
  public void onStartListening() {
    super.onStartListening();
  }

  // Called when your app can no longer update your tile.
  @Override
  public void onStopListening() {
    super.onStopListening();
  }

  // Called when the user taps on your tile in an active or inactive state.
  @Override
  public void onClick() {
    super.onClick();
  }

  // Called when the user removes your tile.
  @Override
  public void onTileRemoved() {
    super.onTileRemoved();
  }
}

ประกาศ TileService ในไฟล์ Manifest ของแอป เพิ่มชื่อและป้ายกำกับของ TileService ไอคอนที่กำหนดเองที่คุณสร้างขึ้นในส่วนก่อนหน้า และสิทธิ์ที่เหมาะสม

 <service
     android:name=".MyQSTileService"
     android:exported="true"
     android:label="@string/my_default_tile_label"  // 18-character limit.
     android:icon="@drawable/my_default_icon_label"
     android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
     <intent-filter>
         <action android:name="android.service.quicksettings.action.QS_TILE" />
     </intent-filter>
 </service>

จัดการ TileService

เมื่อสร้างและประกาศ TileService ในไฟล์ Manifest ของแอปแล้ว คุณต้องจัดการสถานะของบริการ

TileService เป็น บริการที่มีผลผูกพัน TileService จะมีผลผูกพันเมื่อแอปขอหรือเมื่อระบบต้องสื่อสารกับบริการ วงจรของบริการที่มีผลผูกพันโดยทั่วไป จะมีเมธอดเรียกกลับ 4 รายการ ได้แก่ onCreate(), onBind(), onUnbind() และ onDestroy() ระบบจะเรียกใช้เมธอดเหล่านี้ทุกครั้งที่บริการเข้าสู่ระยะใหม่ของวงจร

ภาพรวมวงจร TileService

นอกเหนือจากเมธอดเรียกกลับที่ควบคุมวงจรของบริการที่มีผลผูกพันแล้ว คุณต้องใช้เมธอดอื่นๆ ที่เฉพาะเจาะจงกับวงจร TileService ระบบอาจเรียกใช้เมธอดเหล่านี้ ภายนอก onCreate() และ onDestroy() เนื่องจากระบบจะเรียกใช้เมธอดวงจร Service และเมธอดวงจร TileService ใน 2 เธรดแบบอะซิงโครนัสแยกกัน

วงจร TileService มีเมธอดต่อไปนี้ ซึ่งระบบจะเรียกใช้ทุกครั้งที่ TileService เข้าสู่ระยะใหม่ของวงจร

  • onTileAdded(): ระบบจะเรียกใช้เมธอดนี้เฉพาะเมื่อผู้ใช้เพิ่มการ์ดของคุณเป็นครั้งแรก และหากผู้ใช้นำการ์ดของคุณออกแล้วเพิ่มอีกครั้ง นี่เป็นเวลาที่ดีที่สุดในการเริ่มต้นใช้งานแบบครั้งเดียว อย่างไรก็ตาม การดำเนินการนี้อาจไม่ครอบคลุมการเริ่มต้นใช้งานที่จำเป็นทั้งหมด

  • onStartListening() และ onStopListening(): ระบบจะเรียกใช้เมธอดเหล่านี้ ทุกครั้งที่แอปอัปเดตการ์ด และเรียกใช้บ่อยๆ TileService จะยังคงมีผลผูกพันระหว่าง onStartListening() และ onStopListening() ซึ่งช่วยให้แอปแก้ไขการ์ดและส่งการอัปเดตได้

  • onTileRemoved(): ระบบจะเรียกใช้เมธอดนี้ก็ต่อเมื่อผู้ใช้นำการ์ดของคุณออก

เลือกโหมดการฟัง

TileService จะฟังในโหมด แอ็กทีฟ หรือโหมด ไม่แอ็กทีฟ เราขอแนะนำให้ใช้โหมดแอ็กทีฟ ซึ่งคุณจะต้องประกาศในไฟล์ Manifest ของแอป มิฉะนั้น TileService จะอยู่ในโหมดมาตรฐานและไม่จำเป็นต้องประกาศ

อย่าสันนิษฐานว่า TileService จะทำงานนอกเหนือจากเมธอดคู่ onStartListening() และ onStopListening()

ใช้โหมดแอ็กทีฟสำหรับ TileService ที่ฟังและตรวจสอบสถานะในกระบวนการของตัวเอง TileService ในโหมดแอ็กทีฟจะมีผลผูกพันสำหรับ onTileAdded(), onTileRemoved(), เหตุการณ์การแตะ และเมื่อกระบวนการของแอปขอ

เราขอแนะนำให้ใช้โหมดแอ็กทีฟหาก TileService ได้รับการแจ้งเตือนเมื่อกระบวนการของตัวเองควรจะอัปเดตสถานะการ์ด การ์ดแอ็กทีฟจะจำกัดภาระงานของระบบเนื่องจากไม่จำเป็นต้องมีผลผูกพันทุกครั้งที่แผงการตั้งค่าด่วนปรากฏแก่ผู้ใช้

คุณสามารถเรียกใช้เมธอดแบบคงที่ TileService.requestListeningState() เพื่อ ขอให้เริ่มสถานะการฟังและรับเมธอดเรียกกลับไปยัง onStartListening()

คุณประกาศโหมดแอ็กทีฟได้โดยเพิ่ม META_DATA_ACTIVE_TILE ลงใน ไฟล์ Manifest ของแอป

<service ...>
    <meta-data android:name="android.service.quicksettings.ACTIVE_TILE"
         android:value="true" />
    ...
</service>

โหมดไม่แอ็กทีฟ

โหมดไม่แอ็กทีฟคือโหมดมาตรฐาน TileService จะอยู่ในโหมดไม่แอ็กทีฟหากมีผลผูกพันทุกครั้งที่การ์ดปรากฏแก่ผู้ใช้ ซึ่งหมายความว่าระบบอาจสร้างและผูก TileService อีกครั้งในบางครั้งที่อยู่นอกเหนือการควบคุม นอกจากนี้ ระบบยังอาจยกเลิกการผูกและทำลายบริการเมื่อผู้ใช้ไม่ได้ดูการ์ด

แอปจะได้รับเมธอดเรียกกลับไปยัง onStartListening() หลังจากที่ผู้ใช้เปิดแผงการตั้งค่าด่วน คุณสามารถอัปเดตออบเจ็กต์ Tile ได้หลายครั้งตามต้องการระหว่าง onStartListening() และ onStopListening()

คุณไม่จำเป็นต้องประกาศโหมดไม่แอ็กทีฟ เพียงแค่ไม่ต้องเพิ่ม META_DATA_ACTIVE_TILE ลงในไฟล์ Manifest ของแอป

ภาพรวมสถานะการ์ด

หลังจากที่ผู้ใช้เพิ่มการ์ดแล้ว การ์ดจะอยู่ในสถานะใดสถานะหนึ่งต่อไปนี้เสมอ

  • STATE_ACTIVE: แสดงสถานะเปิดหรือเปิดใช้ ผู้ใช้สามารถโต้ตอบกับการ์ดได้ขณะที่การ์ดอยู่ในสถานะนี้

    ตัวอย่างเช่น สำหรับการ์ดแอปฟิตเนสที่ช่วยให้ผู้ใช้เริ่มเซสชันการออกกำลังกายแบบจับเวลาได้ STATE_ACTIVE จะหมายความว่าผู้ใช้เริ่มเซสชันการออกกำลังกายแล้วและตัวจับเวลากำลังทำงาน

  • STATE_INACTIVE: แสดงสถานะปิดหรือหยุดชั่วคราว ผู้ใช้สามารถโต้ตอบกับการ์ดได้ขณะที่การ์ดอยู่ในสถานะนี้

    หากใช้ตัวอย่างการ์ดแอปฟิตเนสอีกครั้ง การ์ดใน STATE_INACTIVE จะหมายความว่าผู้ใช้ยังไม่ได้เริ่มเซสชันการออกกำลังกาย แต่สามารถทำได้หากต้องการ

  • STATE_UNAVAILABLE: แสดงสถานะไม่พร้อมใช้งานชั่วคราว ผู้ใช้ไม่สามารถโต้ตอบกับการ์ดได้ขณะที่การ์ดอยู่ในสถานะนี้

    ตัวอย่างเช่น การ์ดใน STATE_UNAVAILABLE หมายความว่าการ์ดไม่พร้อมใช้งานสำหรับผู้ใช้ในขณะนี้ด้วยเหตุผลบางประการ

ระบบจะตั้งค่าสถานะเริ่มต้นของออบเจ็กต์ Tile เท่านั้น คุณตั้งค่าสถานะของออบเจ็กต์ Tile ตลอดวงจรที่เหลือ

ระบบอาจย้อมสีไอคอนและพื้นหลังของการ์ดเพื่อแสดงสถานะของออบเจ็กต์ Tile ออบเจ็กต์ Tile ที่ตั้งค่าเป็น STATE_ACTIVE จะมีสีเข้มที่สุด ส่วน STATE_INACTIVE และ STATE_UNAVAILABLE จะมีสีอ่อนลงเรื่อยๆ เฉดสีที่แน่นอนจะขึ้นอยู่กับผู้ผลิตและเวอร์ชัน

การ์ด VPN จะมีสีอ่อนๆ เพื่อแสดงสถานะของออบเจ็กต์
รูปที่ 4 ตัวอย่างการ์ดที่ย้อมสีเพื่อแสดงสถานะการ์ด (สถานะแอ็กทีฟ ไม่แอ็กทีฟ และไม่พร้อมใช้งานตามลำดับ)

อัปเดตการ์ด

คุณสามารถอัปเดตการ์ดได้เมื่อได้รับเมธอดเรียกกลับไปยัง onStartListening() การ์ดสามารถอัปเดตได้อย่างน้อย 1 ครั้งจนกว่าจะได้รับเมธอดเรียกกลับไปยัง onStopListening() ทั้งนี้ขึ้นอยู่กับโหมดของการ์ด

ในโหมดแอ็กทีฟ คุณสามารถอัปเดตการ์ดได้ 1 ครั้งก่อนที่จะได้รับเมธอดเรียกกลับไปยัง onStopListening() ในโหมดไม่แอ็กทีฟ คุณสามารถอัปเดตการ์ดได้หลายครั้งตามต้องการระหว่าง onStartListening() และ onStopListening()

คุณสามารถเรียกข้อมูลออบเจ็กต์ Tile ได้โดยเรียกใช้ getQsTile() หากต้องการอัปเดตช่องที่เฉพาะเจาะจงของออบเจ็กต์ Tile ให้เรียกใช้เมธอดต่อไปนี้

คุณต้องเรียกใช้ updateTile() เพื่ออัปเดตการ์ดเมื่อตั้งค่า ช่องของออบเจ็กต์ Tile เป็นค่าที่ถูกต้องแล้ว ซึ่งจะทำให้ระบบแยกวิเคราะห์ข้อมูลการ์ดที่อัปเดตแล้วและอัปเดต UI

Kotlin

data class StateModel(val enabled: Boolean, val label: String, val icon: Icon)

override fun onStartListening() {
  super.onStartListening()
  val state = getStateFromService()
  qsTile.label = state.label
  qsTile.contentDescription = tile.label
  qsTile.state = if (state.enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE
  qsTile.icon = state.icon
  qsTile.updateTile()
}

Java

public class StateModel {
  final boolean enabled;
  final String label;
  final Icon icon;

  public StateModel(boolean e, String l, Icon i) {
    enabled = e;
    label = l;
    icon = i;
  }
}

@Override
public void onStartListening() {
  super.onStartListening();
  StateModel state = getStateFromService();
  Tile tile = getQsTile();
  tile.setLabel(state.label);
  tile.setContentDescription(state.label);
  tile.setState(state.enabled ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
  tile.setIcon(state.icon);
  tile.updateTile();
}

จัดการการแตะ

ผู้ใช้สามารถแตะการ์ดเพื่อทริกเกอร์การดำเนินการได้หากการ์ดอยู่ใน STATE_ACTIVE หรือ STATE_INACTIVE จากนั้นระบบจะเรียกใช้เมธอดเรียกกลับ onClick() ของแอป

เมื่อแอปได้รับเมธอดเรียกกลับไปยัง onClick() แล้ว แอปจะเปิดกล่องโต้ตอบหรือกิจกรรม ทริกเกอร์งานเบื้องหลัง หรือเปลี่ยนสถานะของการ์ดได้

Kotlin

var clicks = 0
override fun onClick() {
  super.onClick()
  counter++
  qsTile.state = if (counter % 2 == 0) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE
  qsTile.label = "Clicked $counter times"
  qsTile.contentDescription = qsTile.label
  qsTile.updateTile()
}

Java

int clicks = 0;

@Override
public void onClick() {
  super.onClick();
  counter++;
  Tile tile = getQsTile();
  tile.setState((counter % 2 == 0) ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
  tile.setLabel("Clicked " + counter + " times");
  tile.setContentDescription(tile.getLabel());
  tile.updateTile();
}

เปิดกล่องโต้ตอบ

showDialog() จะยุบแผงการตั้งค่าด่วนและแสดงกล่องโต้ตอบ ใช้กล่องโต้ตอบเพื่อเพิ่มบริบทให้กับการดำเนินการหากต้องมีการป้อนข้อมูลเพิ่มเติมหรือความยินยอมของผู้ใช้

เปิดกิจกรรม

startActivityAndCollapse() จะเริ่มกิจกรรมขณะยุบแผง กิจกรรมมีประโยชน์หากมีข้อมูลโดยละเอียดเพิ่มเติมที่จะแสดงนอกเหนือจากภายในกล่องโต้ตอบ หรือหากการดำเนินการของคุณมีการโต้ตอบสูง

หากแอปต้องมีการโต้ตอบของผู้ใช้จำนวนมาก แอปควรเปิดกิจกรรมเป็นทางเลือกสุดท้ายเท่านั้น ให้ลองใช้กล่องโต้ตอบหรือปุ่มสลับแทน

การแตะการ์ดค้างไว้จะแสดงหน้าจอข้อมูลแอป ให้ผู้ใช้ หากต้องการลบล้าง ลักษณะการทำงานนี้และเปิดกิจกรรมสำหรับการตั้งค่ากำหนดลักษณะแทน ให้เพิ่ม <intent-filter>ลงในกิจกรรมรายการใดรายการหนึ่งด้วย ACTION_QS_TILE_PREFERENCES

ตั้งแต่ Android API 28 เป็นต้นไป PendingIntent ต้องมี Intent.FLAG_ACTIVITY_NEW_TASK ดังนี้

if (Build.VERSION.SDK_INT >= 28) {
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}

หรือคุณจะเพิ่ม Flag ใน AndroidManifest.xml ในส่วน Activity ที่เฉพาะเจาะจงก็ได้

ทำเครื่องหมายการ์ดเป็นสลับได้

เราขอแนะนำให้ทำเครื่องหมายการ์ดเป็นสลับได้หากการ์ดทำหน้าที่เป็นสวิตช์ 2 สถานะเป็นหลัก (ซึ่งเป็นลักษณะการทำงานที่พบได้บ่อยที่สุดของการ์ด) การดำเนินการนี้จะช่วยให้ข้อมูลเกี่ยวกับลักษณะการทำงานของการ์ดแก่ระบบปฏิบัติการและปรับปรุงการช่วยเหลือพิเศษโดยรวม

ตั้งค่าข้อมูลเมตา TOGGLEABLE_TILE เป็น true เพื่อทำเครื่องหมายการ์ดเป็นสลับได้

<service ...>
  <meta-data android:name="android.service.quicksettings.TOGGLEABLE_TILE"
    android:value="true" />
</service>

ดำเนินการเฉพาะการดำเนินการที่ปลอดภัยในอุปกรณ์ที่ล็อกอย่างปลอดภัย

การ์ดอาจแสดงอยู่เหนือหน้าจอล็อกในอุปกรณ์ที่ล็อก หากการ์ด มีข้อมูลที่ละเอียดอ่อน ให้ตรวจสอบค่า isSecure() เพื่อ ดูว่าอุปกรณ์อยู่ในสถานะปลอดภัยหรือไม่ และ TileService ควร เปลี่ยนลักษณะการทำงานตามนั้น

หากการดำเนินการของการ์ดปลอดภัยที่จะดำเนินการขณะล็อก ให้ใช้ startActivity() เพื่อเปิดกิจกรรมเหนือหน้าจอล็อก

หากการดำเนินการของการ์ดไม่ปลอดภัย ให้ใช้ unlockAndRun() เพื่อแจ้งให้ผู้ใช้ ปลดล็อกอุปกรณ์ หากสำเร็จ ระบบจะเรียกใช้ออบเจ็กต์ Runnable ที่คุณส่งผ่านไปยังเมธอดนี้

จัดหมวดหมู่การ์ด

คุณสามารถจัดหมวดหมู่การ์ดเพื่อปรับปรุงประสบการณ์ของผู้ใช้ในการตั้งค่าด่วน ระบบจะจัดระเบียบการ์ดเป็นหมวดหมู่ต่างๆ เช่น การเชื่อมต่อ จอแสดงผล และความเป็นส่วนตัว ระบบใช้หมวดหมู่เหล่านี้เพื่อจัดเรียงและจัดกลุ่มการ์ดในโหมดแก้ไขการตั้งค่าด่วน ซึ่งช่วยให้ผู้ใช้ค้นหาและจัดการได้ง่ายขึ้น

การใช้งาน

หากต้องการระบุหมวดหมู่สำหรับ TileService ให้เพิ่มช่องข้อมูลเมตาลงในการประกาศบริการในไฟล์ AndroidManifest.xml ดังนี้

  • ใน AndroidManifest.xml ให้เพิ่มองค์ประกอบ <meta-data> ภายในองค์ประกอบ <service> สำหรับ TileService
  • android:name: ตั้งค่านี้เป็น android.service.quicksettings.TILE_CATEGORY
  • android:value: กำหนดค่าคงที่ของหมวดหมู่ที่กำหนดไว้ล่วงหน้า เช่น android.service.quicksettings.CATEGORY_CONNECTIVITY หรือ android.service.quicksettings.CATEGORY_DISPLAY

ดังที่แสดงในตัวอย่างต่อไปนี้

<service
    android:name=".MyConnectivityTileService"
    [...]
    >
    <meta-data android:name="android.service.quicksettings.TILE_CATEGORY"
        android:value="android.service.quicksettings.CATEGORY_CONNECTIVITY" />
</service>

API มีชุดหมวดหมู่ที่กำหนดไว้ล่วงหน้าให้เลือก หมวดหมู่เหล่านี้กำหนดเป็นค่าคงที่สตริงภายในคลาส TileService

หากไม่ได้ระบุหมวดหมู่ ระบบจะกำหนดหมวดหมู่เริ่มต้นโดยอัตโนมัติ ดังนี้

  • จากแอประบบ: สำหรับการ์ดที่เป็นส่วนหนึ่งของแอปพลิเคชันระบบ
  • จากแอปที่คุณติดตั้ง: สำหรับการ์ดจากแอปพลิเคชันที่ผู้ใช้ติดตั้ง

แม้ว่าอุปกรณ์ Google Pixel จะใช้หมวดหมู่ในการตั้งค่าด่วน แต่ OEM สามารถเลือกใช้หรือไม่ใช้ข้อมูลหมวดหมู่นี้ใน UI ของระบบตามลำดับก็ได้

แจ้งให้ผู้ใช้เพิ่มการ์ด

หากต้องการเพิ่มการ์ดด้วยตนเอง ผู้ใช้ต้องทำตามขั้นตอนต่อไปนี้

  1. ปัดลงเพื่อเปิดแผงการตั้งค่าด่วน
  2. แตะปุ่มแก้ไข
  3. เลื่อนดูการ์ดทั้งหมดในอุปกรณ์จนกว่าจะพบการ์ดของคุณ
  4. แตะการ์ดค้างไว้ แล้วลากไปยังรายการการ์ดที่ใช้งานอยู่

นอกจากนี้ ผู้ใช้ยังย้ายหรือนำการ์ดของคุณออกได้ทุกเมื่อ

ตั้งแต่ Android 13 เป็นต้นไป คุณสามารถใช้เมธอด requestAddTileService() เพื่อให้ผู้ใช้เพิ่มการ์ดลงในอุปกรณ์ได้ง่ายขึ้นมาก เมธอดนี้จะแจ้งให้ผู้ใช้ทราบถึงคำขอให้เพิ่มการ์ดลงในแผงการตั้งค่าด่วนโดยตรงอย่างรวดเร็ว ข้อความแจ้งจะมีชื่อแอปพลิเคชัน ป้ายกำกับ และไอคอนที่ระบุ

ข้อความแจ้ง Quick Settings Placement API
รูปที่ 5 ข้อความแจ้งของ Quick Settings Placement API
public void requestAddTileService (
  ComponentName tileServiceComponentName,
  CharSequence tileLabel,
  Icon icon,
  Executor resultExecutor,
  Consumer<Integer> resultCallback
)

เมธอดเรียกกลับจะมีข้อมูลว่ามีการเพิ่มการ์ดหรือไม่ ไม่ได้เพิ่ม หากมีการ์ดอยู่แล้ว หรือหากเกิดข้อผิดพลาด

โปรดใช้ดุลพินิจในการตัดสินใจว่าจะแจ้งให้ผู้ใช้ทราบเมื่อใดและบ่อยเพียงใด เราขอแนะนำให้เรียกใช้ requestAddTileService() ในบริบทเท่านั้น เช่น เมื่อผู้ใช้โต้ตอบกับฟีเจอร์ที่การ์ดของคุณช่วยอำนวยความสะดวกเป็นครั้งแรก

ระบบสามารถเลือกที่จะหยุดประมวลผลคำขอสำหรับ ComponentNameที่ระบุได้หากผู้ใช้ปฏิเสธคำขอดังกล่าวหลายครั้งก่อนหน้านี้ ระบบจะกำหนดผู้ใช้จาก Context ที่ใช้เพื่อเรียกข้อมูลบริการนี้ โดยต้องตรงกับผู้ใช้ปัจจุบัน