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

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

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

สร้างไอคอนที่บอกใบ้ไปยังวัตถุประสงค์ของการ์ดของคุณ วิธีนี้ช่วยให้ผู้ใช้ระบุได้อย่างง่ายดายว่าการ์ดของคุณเหมาะกับความต้องการของตนหรือไม่ ตัวอย่างเช่น คุณอาจสร้าง ไอคอนนาฬิกาจับเวลา โดยมีการ์ดแอปฟิตเนสที่อนุญาตให้ผู้ใช้เริ่ม เซสชันการออกกำลังกาย
สร้างและประกาศ 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
เป็นบริการที่มีผลผูกพัน 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
จะสว่างขึ้นเรื่อยๆ โทนสีที่ตรงกัน
ขึ้นอยู่กับผู้ผลิตและเวอร์ชัน

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

public void requestAddTileService (
ComponentName tileServiceComponentName,
CharSequence tileLabel,
Icon icon,
Executor resultExecutor,
Consumer<Integer> resultCallback
)
Callback มีข้อมูลว่าได้มีการเพิ่มการ์ดแล้วหรือไม่ ไม่ใช่ เพิ่ม ถ้ามีอยู่แล้ว หรือมีข้อผิดพลาดเกิดขึ้น
ใช้วิจารณญาณในการตัดสินใจว่าจะแสดงข้อความแจ้งให้ผู้ใช้ทราบเมื่อใดและบ่อยเพียงใด เราขอแนะนําให้เรียก requestAddTileService()
ในบริบทเท่านั้น เช่น เมื่อผู้ใช้โต้ตอบกับฟีเจอร์ที่การ์ดของคุณอำนวยความสะดวกเป็นครั้งแรก
ระบบสามารถเลือกหยุดประมวลผลคำขอสำหรับ
ComponentName
หากผู้ใช้เคยปฏิเสธมาหลายครั้งแล้ว ระบบจะกำหนดผู้ใช้จาก Context
ที่ใช้ดึงข้อมูลบริการนี้ ซึ่งต้องตรงกับผู้ใช้ปัจจุบัน