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

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

เราขอแนะนำให้หลีกเลี่ยงแนวทางปฏิบัติบางอย่างเพื่อช่วยปรับปรุงการค้นพบและการใช้งานที่ง่ายของไทล์
หลีกเลี่ยงการใช้ไทล์เพื่อเปิดแอป ให้ใช้ทางลัดของแอปหรือตัวเรียกใช้มาตรฐานแทน
หลีกเลี่ยงการใช้ไทล์สำหรับการดำเนินการของผู้ใช้แบบครั้งเดียว ใช้ทางลัดแอปหรือการแจ้งเตือนแทน
หลีกเลี่ยงการสร้างไทล์มากเกินไป เราขอแนะนำให้ใช้ได้สูงสุด 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
จะผูกไว้เมื่อแอปของคุณขอหรือหากระบบจำเป็นต้องสื่อสารกับอุปกรณ์ วงจรการใช้งานของบริการที่เชื่อมโยงโดยทั่วไปจะมีเมธอดเรียกกลับ 4 รายการต่อไปนี้
onCreate()
, onBind()
, onUnbind()
และ
onDestroy()
ระบบจะเรียกใช้เมธอดเหล่านี้ทุกครั้งที่
บริการเข้าสู่ระยะวงจรใหม่
ภาพรวมวงจรของ TileService
นอกเหนือจาก Callback ที่ควบคุมวงจรของบริการที่เชื่อมโยงแล้ว คุณต้อง
ใช้เมธอดอื่นๆ ที่เจาะจง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);
}
หรือคุณจะเพิ่มแฟล็กในส่วน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()
เพื่อให้ผู้ใช้เพิ่มไทล์ของคุณลงในอุปกรณ์ได้ง่ายขึ้น วิธีนี้
จะแจ้งให้ผู้ใช้ทราบถึงคำขอให้เพิ่มการ์ดของคุณลงในแผงการตั้งค่าด่วน
โดยตรงอย่างรวดเร็ว พรอมต์ประกอบด้วยชื่อแอปพลิเคชัน ป้ายกำกับที่ระบุ
และไอคอน

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