1. บทนำ
บริการการช่วยเหลือพิเศษเป็นฟีเจอร์ของเฟรมเวิร์ก Android ที่ออกแบบมาเพื่อให้ความคิดเห็นการนำทางทางเลือกให้แก่ผู้ใช้ในนามของแอปพลิเคชันที่ติดตั้งในอุปกรณ์ Android บริการการเข้าถึงสามารถสื่อสารกับผู้ใช้ในนามของแอปพลิเคชัน เช่น โดยการแปลงข้อความเป็นเสียงพูดหรือให้การตอบสนองแบบรู้สึกได้เมื่อผู้ใช้วางเมาส์เหนือบริเวณที่สำคัญของหน้าจอ Codelab นี้จะแสดงวิธีสร้างบริการการช่วยเหลือพิเศษที่ง่ายมากๆ
บริการช่วยเหลือพิเศษคืออะไร
บริการช่วยเหลือพิเศษจะช่วยผู้ใช้ที่พิการในการใช้อุปกรณ์และแอป Android เป็นบริการที่ได้รับมอบสิทธิ์มาอย่างยาวนาน ซึ่งช่วยให้ผู้ใช้ประมวลผลข้อมูลบนหน้าจอได้และช่วยให้ผู้ใช้โต้ตอบกับอุปกรณ์ได้อย่างมีความหมาย
ตัวอย่างบริการการช่วยเหลือพิเศษทั่วไป
- การเข้าถึงด้วยสวิตช์: อนุญาตให้ผู้ใช้ Android ที่มีข้อจำกัดในการเคลื่อนไหวโต้ตอบกับอุปกรณ์ได้โดยใช้สวิตช์อย่างน้อย 1 ตัว
- การเข้าถึงด้วยเสียง (เบต้า): ช่วยให้ผู้ใช้ Android ที่มีข้อจำกัดด้านการเคลื่อนไหวสามารถควบคุมอุปกรณ์ด้วยคำสั่งเสียงได้
- TalkBack: โปรแกรมอ่านหน้าจอที่มักมีการใช้โดยผู้ใช้ที่มีความบกพร่องทางสายตาหรือตาบอด
การสร้างบริการการช่วยเหลือพิเศษ
แม้ว่า Google จะให้บริการต่างๆ เช่น การเข้าถึงด้วยสวิตช์ การเข้าถึงด้วยเสียง และ TalkBack สำหรับผู้ใช้ Android แต่บริการเหล่านี้อาจไม่ให้บริการผู้ใช้ทุกคนที่เป็นผู้พิการ เนื่องจากผู้ใช้ที่มีความพิการจำนวนมากมีความต้องการเฉพาะตัว API ของ Android สำหรับการสร้างบริการการช่วยเหลือพิเศษจึงเปิดกว้าง และนักพัฒนาแอปจึงสร้างบริการการช่วยเหลือพิเศษและเผยแพร่ผ่าน Play Store ได้อย่างอิสระ
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะได้พัฒนาบริการง่ายๆ ซึ่งมีประโยชน์ 2-3 อย่างโดยใช้ Accessibility API หากเขียนแอป Android พื้นฐานได้ คุณก็สามารถพัฒนาบริการที่คล้ายกันได้
Accessibility API มีประสิทธิภาพมาก โค้ดสำหรับบริการที่คุณจะสร้างมีเพียง 4 ไฟล์เท่านั้น และใช้โค้ดประมาณ 200 บรรทัด
ผู้ใช้ปลายทาง
คุณจะสร้างบริการสำหรับผู้ใช้สมมติโดยมีลักษณะดังต่อไปนี้
- ผู้ใช้มีปัญหาในการใช้ปุ่มด้านข้างในอุปกรณ์
- ผู้ใช้มีปัญหาในการเลื่อนหรือปัด
รายละเอียดบริการ
บริการจะวางซ้อนแถบการดำเนินการส่วนกลางบนหน้าจอ ผู้ใช้สามารถแตะปุ่มบนแถบนี้เพื่อดำเนินการต่อไปนี้ได้
- ปิดอุปกรณ์โดยไม่ให้สัมผัสกับปุ่มเปิด/ปิดจริงที่อยู่ด้านข้างโทรศัพท์
- ปรับระดับเสียงโดยไม่ต้องแตะปุ่มปรับระดับเสียงด้านข้างของโทรศัพท์
- ดำเนินการเลื่อนโดยไม่ต้องเลื่อนจริงๆ
- ปัดได้โดยไม่ต้องใช้ท่าทางสัมผัสการปัด
สิ่งที่คุณต้องมี
Codelab นี้จะสมมติว่าคุณจะใช้สิ่งต่อไปนี้
- คอมพิวเตอร์ที่ใช้ Android Studio
- เทอร์มินัลสำหรับเรียกใช้คำสั่ง Shell แบบง่าย
- อุปกรณ์ที่ใช้ Android 7.0 (Nougat) ซึ่งเชื่อมต่อกับคอมพิวเตอร์ที่คุณจะใช้การพัฒนา
มาเริ่มกันเลย
2. การตั้งค่า
ใช้เทอร์มินัลเพื่อสร้างไดเรกทอรีที่คุณใช้งาน เปลี่ยนเป็นไดเรกทอรีนี้
ดาวน์โหลดโค้ด
คุณโคลนที่เก็บที่มีโค้ดสำหรับ Codelab ได้ โดยทำดังนี้
git clone https://github.com/android/codelab-android-accessibility.git
ที่เก็บนี้ประกอบด้วยโปรเจ็กต์ Android Studio หลายโปรเจ็กต์ เมื่อใช้ Android Studio ให้เปิด GlobalActionBarService
เปิด Android Studio โดยคลิกไอคอน Studio ดังนี้
เลือกตัวเลือกนำเข้าโปรเจ็กต์ (Eclipse ADT, Gradle ฯลฯ)
ไปยังตำแหน่งที่คุณโคลนแหล่งที่มา แล้วเลือก GlobalActionBarService
จากนั้นใช้เทอร์มินัลแล้วเปลี่ยนเป็นไดเรกทอรีราก
3. ทำความเข้าใจโค้ดเริ่มต้น
สำรวจโปรเจ็กต์ที่คุณเปิด
เราได้สร้างโครงกระดูกสำหรับบริการการช่วยเหลือพิเศษให้คุณแล้ว โค้ดทั้งหมดที่คุณจะเขียนใน Codelab นี้จำกัดไว้ไม่เกิน 4 ไฟล์ต่อไปนี้
- app/src/main/AndroidManifest.xml
- app/src/main/res/layout/action_bar.xml
- app/src/main/res/xml/global_action_bar_service.xml
- app/src/main/java/com/example/android/globalactionbarservice/GlobalActionBarService.java
คำแนะนำแบบทีละขั้นเกี่ยวกับเนื้อหาของแต่ละไฟล์มีดังนี้
AndroidManifest.xml
ข้อมูลเกี่ยวกับบริการการช่วยเหลือพิเศษจะประกาศไว้ในไฟล์ Manifest ดังนี้
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.globalactionbarservice">
<application>
<service
android:name=".GlobalActionBarService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:exported="true">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/global_action_bar_service" />
</service>
</application>
</manifest>
มีการประกาศรายการที่จำเป็น 3 รายการต่อไปนี้ใน AndroidManifest.xml
- สิทธิ์ในการเชื่อมโยงกับบริการการช่วยเหลือพิเศษมีดังนี้
<service
...
android:permission = "android.permission.BIND_ACCESSIBILITY_SERVICE">
...
</service>
- Intent ของ AccessibilityService มีดังนี้
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
- ตำแหน่งของไฟล์ที่มีข้อมูลเมตาสำหรับบริการที่คุณกำลังสร้าง:
<meta-data
...
android:resource="@xml/global_action_bar_service" />
</service>
global_action_bar_service.xml
ไฟล์นี้มีข้อมูลเมตาสำหรับบริการ
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canPerformGestures="true"
android:canRetrieveWindowContent="true" />
การใช้องค์ประกอบ <accessibility-service> จะได้รับการกำหนดข้อมูลเมตาต่อไปนี้
- ประเภทความคิดเห็นสำหรับบริการนี้ (Codelab นี้ใช้ feedbackgeneric ซึ่งเป็นค่าเริ่มต้นที่ดี)
- แฟล็กการช่วยเหลือพิเศษสำหรับบริการ (Codelab นี้ใช้แฟล็กเริ่มต้น)
- ความสามารถที่จำเป็นสำหรับบริการมีดังนี้
- หากต้องการเลื่อน ตั้งค่า android:canPerformGestures เป็น true
- หากต้องการดึงเนื้อหาหน้าต่าง android:canRetrieveWindowContent จะตั้งเป็น true
GlobalActionBarService.java
รหัสส่วนใหญ่สำหรับบริการการช่วยเหลือพิเศษจะอยู่ใน GlobalActionBarService.java โดยในขั้นต้น ไฟล์จะมีโค้ดขั้นต่ำสัมบูรณ์สำหรับบริการการช่วยเหลือพิเศษดังนี้
- คลาสที่ขยาย AccessibilityService
- เมธอดที่มีการลบล้างที่จำเป็น 2 วิธี (เว้นว่างไว้ใน Codelab นี้)
public class GlobalActionBarService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
@Override
public void onInterrupt() {
}
}
คุณจะเพิ่มโค้ดลงในไฟล์นี้ระหว่าง Codelab
action_bar.xml
บริการแสดง UI ที่มี 4 ปุ่ม และไฟล์เลย์เอาต์ action_bar.xml มีมาร์กอัปสำหรับแสดงปุ่มเหล่านั้น ดังนี้
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
ปัจจุบันไฟล์นี้มี LinearLayout ว่างเปล่า คุณจะเพิ่มมาร์กอัปสำหรับปุ่มต่างๆ ในระหว่าง Codelab
การเปิดใช้งานแอปพลิเคชัน
ตรวจสอบว่าอุปกรณ์เชื่อมต่อกับคอมพิวเตอร์แล้ว แตะไอคอนเล่นสีเขียว จากแถบเมนูที่ด้านบนของหน้าจอ ซึ่งจะเป็นการเปิดแอปที่คุณกำลังใช้อยู่
ไปที่การตั้งค่า > การช่วยเหลือพิเศษ ติดตั้งบริการแถบการทำงานส่วนกลางในอุปกรณ์แล้ว
คลิก Global Action Bar Service แล้วเปิด คุณควรจะเห็นกล่องโต้ตอบสิทธิ์ต่อไปนี้
บริการการช่วยเหลือพิเศษจะขอสิทธิ์ในการสังเกตการดำเนินการของผู้ใช้ ดึงเนื้อหาในหน้าต่าง และทำท่าทางสัมผัสในนามของผู้ใช้ เมื่อใช้บริการการช่วยเหลือพิเศษของบุคคลที่สาม โปรดตรวจสอบว่าคุณเชื่อถือแหล่งที่มานั้นจริงๆ
การเรียกใช้บริการไม่ช่วยอะไรเลย เนื่องจากเรายังไม่ได้เพิ่มฟังก์ชันใดๆ มาเริ่มกันเลย
4. การสร้างปุ่ม
เปิด action_bar.xml ใน res/layout เพิ่มมาร์กอัปภายใน LinearLayout ที่ว่างเปล่าในปัจจุบัน ดังนี้
<LinearLayout ...>
<Button
android:id="@+id/power"
android:text="@string/power"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/volume_up"
android:text="@string/volume"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/scroll"
android:text="@string/scroll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/swipe"
android:text="@string/swipe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
ซึ่งจะเป็นการสร้างปุ่มที่ผู้ใช้จะกดเพื่อเริ่มการทำงานต่างๆ ในอุปกรณ์
เปิด GlobalActionBarService.java และเพิ่มตัวแปรเพื่อเก็บเลย์เอาต์สำหรับแถบการดำเนินการ ดังนี้
public class GlobalActionBarService extends AccessibilityService {
FrameLayout mLayout;
...
}
ตอนนี้ให้เพิ่มเมธอด onServiceStarted() ดังนี้
public class GlobalActionBarService extends AccessibilityService {
FrameLayout mLayout;
@Override
protected void onServiceConnected() {
// Create an overlay and display the action bar
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
mLayout = new FrameLayout(this);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
lp.format = PixelFormat.TRANSLUCENT;
lp.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.TOP;
LayoutInflater inflater = LayoutInflater.from(this);
inflater.inflate(R.layout.action_bar, mLayout);
wm.addView(mLayout, lp);
}
}
โค้ดจะขยายเลย์เอาต์และเพิ่มแถบการดำเนินการที่ด้านบนของหน้าจอ
เมธอด onServiceConnected() จะทำงานเมื่อมีการเชื่อมต่อบริการ ขณะนี้บริการการช่วยเหลือพิเศษมีสิทธิ์ที่จำเป็นทั้งหมดเพื่อให้ใช้งานได้ สิทธิ์คีย์ที่คุณจะใช้ที่นี่คือสิทธิ์ WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY สิทธิ์นี้ช่วยให้คุณวาดบนหน้าจอด้านบนเนื้อหาที่มีอยู่ได้โดยตรง โดยไม่ต้องผ่านขั้นตอนการให้สิทธิ์ที่ซับซ้อน
วงจรชีวิตของบริการการช่วยเหลือพิเศษ
วงจรของบริการการช่วยเหลือพิเศษได้รับการจัดการโดยระบบเท่านั้น และเป็นไปตามวงจรชีวิตของบริการที่กำหนดไว้
- บริการการช่วยเหลือพิเศษจะเริ่มต้นเมื่อผู้ใช้เปิดบริการอย่างชัดเจนในการตั้งค่าอุปกรณ์
- หลังจากที่เชื่อมโยงกับบริการแล้ว ระบบจะเรียกใช้ onServiceConnected() บริการที่ต้องการดำเนินการตั้งค่าหลังการเชื่อมโยงสามารถลบล้างเมธอดนี้ได้
- บริการการช่วยเหลือพิเศษจะหยุดเมื่อผู้ใช้ปิดในการตั้งค่าอุปกรณ์หรือเมื่อเรียกใช้ disableSelf()
การใช้บริการ
ก่อนที่จะเปิดใช้บริการโดยใช้ Android Studio ได้ คุณต้องตรวจสอบว่าการตั้งค่า Run ได้รับการกำหนดค่าอย่างถูกต้อง
แก้ไขการกำหนดค่า Run ของคุณ (ใช้ Run จากเมนูด้านบนและไปที่ Edit Configurations จากนั้นเปลี่ยนตัวเลือกการเปิดจาก "กิจกรรมเริ่มต้น" เมื่อใช้เมนูแบบเลื่อนลง เป็น "ไม่มีสิ่งใด"
คุณควรสามารถเปิดบริการโดยใช้ Android Studio ได้แล้ว
แตะไอคอนเล่นสีเขียว จากแถบเมนูที่ด้านบนของหน้าจอ จากนั้นไปที่การตั้งค่า > การช่วยเหลือพิเศษ แล้วเปิด Global Action Bar Service
คุณจะเห็นปุ่ม 4 ปุ่มที่เป็น UI ของบริการวางซ้อนอยู่บนเนื้อหาที่แสดงบนหน้าจอ
ตอนนี้คุณเพิ่มฟังก์ชันการทำงานให้กับปุ่มทั้ง 4 ปุ่ม เพื่อให้ผู้ใช้แตะปุ่มดังกล่าวเพื่อดำเนินการต่างๆ ที่เป็นประโยชน์ได้
5. การกำหนดค่าปุ่มเปิด/ปิด
เพิ่มเมธอด configurePowerButton() ใน configurePowerButton():
private void configurePowerButton() {
Button powerButton = (Button) mLayout.findViewById(R.id.power);
powerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
performGlobalAction(GLOBAL_ACTION_POWER_DIALOG);
}
});
}
สำหรับการเข้าถึงเมนูปุ่มเปิด/ปิด configurePowerButton() จะใช้เมธอด performGlobalAction() ซึ่งให้บริการโดย AccessibilityService โค้ดที่คุณเพิ่งเพิ่มไปนั้นทำได้ง่าย กล่าวคือ การคลิกปุ่มจะทริกเกอร์ onClickListener() การดำเนินการนี้จะเรียกใช้ performGlobalAction(GLOBAL_ACTION_POWER_DIALOG) และแสดงกล่องโต้ตอบการเปิด/ปิดแก่ผู้ใช้
โปรดทราบว่าการดำเนินการส่วนกลางไม่เกี่ยวข้องกับการดูใดๆ การกดปุ่มย้อนกลับ ปุ่มหน้าแรก ปุ่มล่าสุด คือตัวอย่างอื่นๆ ของการดำเนินการส่วนกลาง
ตอนนี้ให้เพิ่ม configurePowerButton() ต่อท้ายเมธอด configurePowerButton() ดังนี้
@Override
protected void onServiceConnected() {
...
configurePowerButton();
}
แตะไอคอนเล่นสีเขียว จากแถบเมนูที่ด้านบนของหน้าจอ จากนั้นไปที่การตั้งค่า > การช่วยเหลือพิเศษ และเริ่ม Global Action Bar Service
กดปุ่มเปิด/ปิดเพื่อแสดงกล่องโต้ตอบเปิด/ปิด
6. การกำหนดค่าปุ่มปรับระดับเสียง
เพิ่มเมธอด configureVolumeButton() ลงใน configureVolumeButton() ดังนี้
private void configureVolumeButton() {
Button volumeUpButton = (Button) mLayout.findViewById(R.id.volume_up);
volumeUpButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
}
});
}
เมธอด configureVolumeButton() จะเพิ่ม onClickListener() ที่ทริกเกอร์เมื่อผู้ใช้กดปุ่มปรับระดับเสียง ใน Listener นี้ configureVolumeButton() ใช้ AudioManager เพื่อปรับระดับเสียงของสตรีม
โปรดทราบว่าทุกคนควบคุมระดับเสียงได้ (คุณไม่จำเป็นต้องเป็นบริการการช่วยเหลือพิเศษจึงจะดำเนินการนี้ได้)
ตอนนี้ให้เพิ่ม configureVolumeButton() ต่อท้ายเมธอด configureVolumeButton() ดังนี้
@Override
protected void onServiceConnected() {
...
configureVolumeButton();
}
แตะไอคอนเล่นสีเขียว จากแถบเมนูที่ด้านบนของหน้าจอ จากนั้นไปที่การตั้งค่า > การเข้าถึง และเริ่ม Global Action Bar Service
กดปุ่มปรับระดับเสียงเพื่อเปลี่ยนระดับเสียง
ตอนนี้ผู้ใช้สมมติที่ไม่สามารถเข้าถึงตัวควบคุมระดับเสียงที่ด้านข้างของอุปกรณ์สามารถใช้ Global Action Bar Service เพื่อเปลี่ยน (เพิ่ม) ระดับเสียงได้
7. การกำหนดค่าปุ่มเลื่อน
ส่วนนี้เกี่ยวข้องกับการเขียนโค้ด 2 วิธี วิธีแรกจะค้นหาโหนดที่เลื่อนได้ และวิธีที่ 2 จะดำเนินการเลื่อนในนามของผู้ใช้
เพิ่มเมธอด findScrollableNode ไปยัง findScrollableNode
private AccessibilityNodeInfo findScrollableNode(AccessibilityNodeInfo root) {
Deque<AccessibilityNodeInfo> deque = new ArrayDeque<>();
deque.add(root);
while (!deque.isEmpty()) {
AccessibilityNodeInfo node = deque.removeFirst();
if (node.getActionList().contains(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD)) {
return node;
}
for (int i = 0; i < node.getChildCount(); i++) {
deque.addLast(node.getChild(i));
}
}
return null;
}
บริการการช่วยเหลือพิเศษไม่มีสิทธิ์เข้าถึงมุมมองจริงบนหน้าจอ แต่จะแสดงสิ่งที่อยู่บนหน้าจอในรูปแบบของต้นไม้ซึ่งสร้างจากออบเจ็กต์ AccessibilityNodeInfo แทน ออบเจ็กต์เหล่านี้มีข้อมูลเกี่ยวกับมุมมองที่แสดง (ตำแหน่งของมุมมอง ข้อความที่เชื่อมโยงกับมุมมอง ข้อมูลเมตาที่เพิ่มสำหรับการเข้าถึง การทำงานที่มุมมองรองรับ ฯลฯ) เมธอด findScrollableNode() จะทำการข้ามผ่านของแผนผังนี้โดยเริ่มจากความกว้างแรกเริ่มที่โหนดราก หากพบโหนดที่เลื่อนได้ (ซึ่งก็คือโหนดที่รองรับการทำงาน AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD)
โหนดจะส่งกลับ หรือไม่ก็จะแสดงค่า Null
ตอนนี้ให้เพิ่มเมธอด configureScrollButton() ใน configureScrollButton()
private void configureScrollButton() {
Button scrollButton = (Button) mLayout.findViewById(R.id.scroll);
scrollButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AccessibilityNodeInfo scrollable = findScrollableNode(getRootInActiveWindow());
if (scrollable != null) {
scrollable.performAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD.getId());
}
}
});
}
เมธอดนี้จะสร้าง onClickListener() ซึ่งจะเริ่มทำงานเมื่อมีการคลิกปุ่มเลื่อน ระบบจะพยายามหาโหนดที่เลื่อนได้ และถ้าสำเร็จ ก็จะดำเนินการเลื่อน
ตอนนี้ให้เพิ่ม configureScrollButton() ลงใน configureScrollButton() ดังนี้
@Override
protected void onServiceConnected() {
...
configureScrollButton();
}
แตะไอคอนเล่นสีเขียว จากแถบเมนูที่ด้านบนของหน้าจอ จากนั้นไปที่การตั้งค่า > การเข้าถึง และเริ่ม Global Action Bar Service
กดปุ่มย้อนกลับเพื่อไปที่การตั้งค่า > การช่วยเหลือพิเศษ รายการต่างๆ ในกิจกรรมการตั้งค่าการช่วยเหลือพิเศษสามารถเลื่อนได้ และการแตะที่ปุ่มเลื่อนจะเป็นการเลื่อน ตอนนี้ผู้ใช้สมมติของเราที่ไม่สามารถเลื่อนดูรายการต่างๆ ได้โดยง่าย สามารถใช้ปุ่มเลื่อนเพื่อเลื่อนดูรายการได้
8. การกำหนดค่าปุ่มเลื่อน
เพิ่มเมธอด configureSwipeButton() ใน configureSwipeButton()
private void configureSwipeButton() {
Button swipeButton = (Button) mLayout.findViewById(R.id.swipe);
swipeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Path swipePath = new Path();
swipePath.moveTo(1000, 1000);
swipePath.lineTo(100, 1000);
GestureDescription.Builder gestureBuilder = new GestureDescription.Builder();
gestureBuilder.addStroke(new GestureDescription.StrokeDescription(swipePath, 0, 500));
dispatchGesture(gestureBuilder.build(), null, null);
}
});
}
เมธอด configureSwipeButton() ใช้ API ใหม่ที่เพิ่มใน N ซึ่งทำท่าทางสัมผัสในนามของผู้ใช้ โค้ดจะใช้ออบเจ็กต์ GestureDescription เพื่อระบุเส้นทางสำหรับท่าทางสัมผัสที่จะทำ (มีการใช้ค่าแบบฮาร์ดโค้ดใน Codelab นี้) จากนั้นจะส่งท่าทางสัมผัสการปัดในนามของผู้ใช้โดยใช้เมธอด AccessibilityService dispatchGesture()
ตอนนี้ให้เพิ่ม configureSwipeButton() ไปยัง configureSwipeButton() ดังนี้
@Override
protected void onServiceConnected() {
...
configureSwipeButton();
}
แตะไอคอนเล่นสีเขียว จากแถบเมนูที่ด้านบนของหน้าจอ จากนั้นไปที่การตั้งค่า > การเข้าถึง และเริ่ม Global Action Bar Service
วิธีที่ง่ายที่สุดในการทดสอบฟังก์ชันการปัดหน้าจอคือให้เปิดแอปพลิเคชัน Maps ที่ติดตั้งในโทรศัพท์ เมื่อแผนที่โหลดขึ้นมา การแตะปุ่ม "ปัด" จะปัดหน้าจอไปทางขวา
9. สรุป
ยินดีด้วย คุณได้สร้างบริการการช่วยเหลือพิเศษที่เรียบง่ายและใช้งานได้แล้ว
คุณสามารถขยายบริการนี้ได้หลายวิธี เช่น
- ทำให้แถบการทำงานขยับได้ (ตอนนี้อยู่ที่ด้านบนสุดของหน้าจอ)
- อนุญาตให้ผู้ใช้เพิ่มและลดระดับเสียง
- อนุญาตให้ผู้ใช้ปัดได้ทั้งซ้ายและขวา
- เพิ่มการรองรับท่าทางสัมผัสเพิ่มเติมที่แถบการทำงานสามารถตอบสนองได้
Codelab นี้ครอบคลุมฟังก์ชันการทำงานเพียงบางส่วนที่ API การช่วยเหลือพิเศษให้บริการ นอกจากนี้ API ยังครอบคลุมสิ่งต่อไปนี้ (บางส่วน)
- รองรับหลายหน้าต่าง
- การรองรับ AccessibilityEvent เมื่อ UI มีการเปลี่ยนแปลง บริการการช่วยเหลือพิเศษจะได้รับแจ้งเกี่ยวกับการเปลี่ยนแปลงเหล่านั้นโดยใช้ออบเจ็กต์ AccessibilityEvent จากนั้นบริการจะตอบสนองต่อการเปลี่ยนแปลง UI ตามความเหมาะสม
- ความสามารถในการควบคุมการขยาย
Codelab นี้ช่วยให้คุณเริ่มต้นเขียนบริการการช่วยเหลือพิเศษได้ หากคุณรู้จักผู้ใช้ที่มีปัญหาด้านความสามารถเข้าถึงได้ง่ายบางอย่างที่คุณต้องการแก้ไข คุณสามารถสร้างบริการเพื่อช่วยเหลือผู้ใช้รายนั้นได้แล้ว