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

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

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

เลือกว่าจะสร้างการ์ดเมื่อใด

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

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

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

หากต้องการช่วยปรับปรุงการค้นพบและความสะดวกในการใช้งานของการ์ดของคุณ เราขอแนะนำให้ การหลีกเลี่ยงการปฏิบัติบางอย่าง:

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

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

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

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

สร้างหน้าต่าง

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

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

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

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

วันที่ ตัวอย่างเวกเตอร์ที่ถอนออกได้
รูปที่ 3 ตัวอย่างเวกเตอร์ที่ถอนออกได้

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

สร้างและประกาศ 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 ของคุณจะผูกพันเมื่อ ที่แอปของคุณขอ หรือว่าระบบจำเป็นต้องสื่อสารกับแอปหรือไม่ ทั่วไป อายุการใช้งานของ bound-service มีวิธี Callback 4 วิธีดังนี้ onCreate(), onBind(), onUnbind() และ onDestroy() ระบบจะเรียกใช้เมธอดเหล่านี้ทุกครั้งที่มีการเรียก เข้าสู่ช่วงวงจรใหม่

ภาพรวมวงจรการใช้งาน TileService

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

วงจรการใช้งาน 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 ที่คุณส่งไปยังออบเจ็กต์นี้

แจ้งให้ผู้ใช้เพิ่มการ์ดของคุณ

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

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

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

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

วันที่ ข้อความแจ้ง API ตำแหน่งโฆษณาของการตั้งค่าด่วน
รูปที่ 5 ข้อความแจ้ง API ตำแหน่งโฆษณาของการตั้งค่าด่วน
public void requestAddTileService (
  ComponentName tileServiceComponentName,
  CharSequence tileLabel,
  Icon icon,
  Executor resultExecutor,
  Consumer<Integer> resultCallback
)

Callback มีข้อมูลว่าได้มีการเพิ่มการ์ดแล้วหรือไม่ ไม่ใช่ เพิ่ม ถ้ามีอยู่แล้ว หรือมีข้อผิดพลาดเกิดขึ้น

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

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