Phát triển Dịch vụ hỗ trợ tiếp cận cho Android

1. Giới thiệu

Dịch vụ hỗ trợ tiếp cận là một tính năng của khung Android, được thiết kế để cung cấp ý kiến phản hồi về chế độ điều hướng thay thế cho người dùng thay cho các ứng dụng được cài đặt trên thiết bị Android. Dịch vụ hỗ trợ tiếp cận có thể giao tiếp với người dùng thay cho ứng dụng, chẳng hạn như bằng cách chuyển đổi văn bản thành lời nói hoặc cung cấp phản hồi xúc giác khi người dùng di chuột vào một vùng quan trọng trên màn hình. Lớp học lập trình này hướng dẫn bạn cách tạo một dịch vụ hỗ trợ tiếp cận rất đơn giản.

Dịch vụ hỗ trợ tiếp cận là gì?

Dịch vụ hỗ trợ tiếp cận giúp người dùng khuyết tật sử dụng các thiết bị và ứng dụng Android. Đây là một dịch vụ đặc quyền chạy trong thời gian dài, giúp người dùng xử lý thông tin trên màn hình và cho phép họ tương tác một cách có ý nghĩa với thiết bị.

Ví dụ về các dịch vụ hỗ trợ tiếp cận phổ biến

  • Tiếp cận bằng công tắc: cho phép người dùng Android bị hạn chế về khả năng di chuyển tương tác với thiết bị bằng một hoặc nhiều công tắc.
  • Điều khiển bằng giọng nói (bản thử nghiệm): cho phép người dùng Android bị hạn chế về khả năng di chuyển điều khiển thiết bị bằng khẩu lệnh.
  • TalkBack: một trình đọc màn hình thường được người dùng khiếm thị hoặc người dùng mù sử dụng.

Xây dựng dịch vụ hỗ trợ tiếp cận

Mặc dù Google cung cấp các dịch vụ như Tiếp cận bằng công tắc, Điều khiển bằng giọng nói và TalkBack cho người dùng Android, nhưng những dịch vụ này không thể phục vụ tất cả người dùng khuyết tật. Vì nhiều người dùng khuyết tật có nhu cầu riêng, nên các API của Android để tạo dịch vụ hỗ trợ tiếp cận là mở và nhà phát triển có thể tự do tạo dịch vụ hỗ trợ tiếp cận rồi phân phối thông qua Cửa hàng Play.

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, bạn sẽ phát triển một dịch vụ đơn giản có thể làm một số việc hữu ích bằng cách sử dụng API hỗ trợ tiếp cận. Nếu có thể viết một ứng dụng Android cơ bản, bạn có thể phát triển một dịch vụ tương tự.

API hỗ trợ tiếp cận rất mạnh mẽ: mã cho dịch vụ mà bạn sẽ tạo chỉ nằm trong 4 tệp và sử dụng khoảng 200 dòng mã!

Người dùng cuối

Bạn sẽ tạo một dịch vụ cho một người dùng giả định có các đặc điểm sau:

  • Người dùng gặp khó khăn khi với tới các nút bên hông trên thiết bị.
  • Người dùng gặp khó khăn khi cuộn hoặc vuốt.

Thông tin chi tiết về dịch vụ

Dịch vụ của bạn sẽ phủ một thanh thao tác chung lên màn hình. Người dùng có thể nhấn vào các nút trên thanh này để thực hiện những thao tác sau:

  1. Tắt nguồn thiết bị mà không cần nhấn nút nguồn thực tế ở cạnh điện thoại.
  2. Điều chỉnh âm lượng mà không cần chạm vào các nút âm lượng ở cạnh điện thoại.
  3. Thực hiện các thao tác cuộn mà không cần thực sự cuộn.
  4. Thực hiện thao tác vuốt mà không cần dùng cử chỉ vuốt.

Bạn cần có

Lớp học lập trình này giả định rằng bạn sẽ sử dụng những nội dung sau:

  1. Máy tính chạy Android Studio.
  2. Một thiết bị đầu cuối để thực thi các lệnh shell đơn giản.
  3. Một thiết bị chạy Android 7.0 (Nougat) được kết nối với máy tính mà bạn sẽ dùng để phát triển.

Hãy bắt đầu!

2. Thiết lập

Sử dụng thiết bị đầu cuối để tạo một thư mục nơi bạn sẽ làm việc. Thay đổi thành thư mục này.

Tải mã nguồn xuống

Bạn có thể sao chép kho lưu trữ chứa mã cho lớp học lập trình này:

git clone https://github.com/android/codelab-android-accessibility.git

Kho lưu trữ này chứa một số dự án Android Studio. Sử dụng Android Studio, hãy mở GlobalActionBarService.

Khởi chạy Android Studio bằng cách nhấp vào biểu tượng Studio:

Logo dùng để chạy Android Studio.

Chọn mục Nhập dự án (Eclipse ADT, Gradle, v.v.):

Màn hình chào mừng của Android Studio.

Chuyển đến vị trí mà bạn đã sao chép nguồn và chọn GlobalActionBarService.

Sau đó, sử dụng một thiết bị đầu cuối để chuyển sang thư mục gốc.

3. Tìm hiểu mã khởi đầu

Khám phá dự án mà bạn đã mở.

Khung cơ bản cho dịch vụ hỗ trợ tiếp cận đã được tạo cho bạn. Tất cả mã bạn sẽ viết trong lớp học lập trình này đều bị giới hạn trong 4 tệp sau:

  1. app/src/main/AndroidManifest.xml
  2. app/src/main/res/layout/action_bar.xml
  3. app/src/main/res/xml/global_action_bar_service.xml
  4. app/src/main/java/com/example/android/globalactionbarservice/GlobalActionBarService.java

Sau đây là hướng dẫn về nội dung của từng tệp.

AndroidManifest.xml

Thông tin về dịch vụ hỗ trợ tiếp cận được khai báo trong tệp kê khai:

<?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 mục bắt buộc sau đây được khai báo trong AndroidManifest.xml:

  1. Quyền liên kết với dịch vụ hỗ trợ tiếp cận:
<service
    ...
    android:permission = "android.permission.BIND_ACCESSIBILITY_SERVICE">
    ...             
</service>
  1. Ý định AccessibilityService:
<intent-filter>
   <action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
  1. Vị trí của tệp chứa siêu dữ liệu cho dịch vụ mà bạn đang tạo:
<meta-data
       ...
       android:resource="@xml/global_action_bar_service" />
</service>

global_action_bar_service.xml

Tệp này chứa siêu dữ liệu cho dịch vụ.

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
   android:accessibilityFeedbackType="feedbackGeneric"
   android:accessibilityFlags="flagDefault"
   android:canPerformGestures="true"
   android:canRetrieveWindowContent="true" />

Bằng cách sử dụng phần tử <accessibility-service>, bạn có thể xác định siêu dữ liệu sau:

  1. Loại ý kiến phản hồi cho dịch vụ này (lớp học lập trình này sử dụng feedbackGeneric, đây là giá trị mặc định phù hợp).
  2. Các cờ hỗ trợ tiếp cận cho dịch vụ (lớp học lập trình này sử dụng các cờ mặc định).
  3. Các chức năng cần thiết cho dịch vụ:
  4. Để thực hiện thao tác vuốt, android:canPerformGestures được đặt thành true.
  5. Để truy xuất nội dung cửa sổ, android:canRetrieveWindowContent được đặt thành true.

GlobalActionBarService.java

Hầu hết mã cho dịch vụ hỗ trợ tiếp cận đều nằm trong GlobalActionBarService.java. Ban đầu, tệp này chứa đoạn mã tối thiểu tuyệt đối cho một dịch vụ hỗ trợ tiếp cận:

  1. Một lớp mở rộng AccessibilityService.
  2. Một số phương thức bắt buộc bị ghi đè (để trống trong lớp học lập trình này).
public class GlobalActionBarService extends AccessibilityService {

   @Override
   public void onAccessibilityEvent(AccessibilityEvent event) {

   }

   @Override
   public void onInterrupt() {

   }
}

Bạn sẽ thêm mã vào tệp này trong lớp học lập trình.

action_bar.xml

Dịch vụ này hiển thị một giao diện người dùng có 4 nút và tệp bố cục action_bar.xml chứa mã đánh dấu để hiển thị các nút đó:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="horizontal"
   android:layout_width="match_parent"
   android:layout_height="wrap_content">
</LinearLayout>

Hiện tại, tệp này chứa một LinearLayout trống. Bạn sẽ thêm mã đánh dấu cho các nút trong lớp học lập trình này.

Khởi chạy ứng dụng

Đảm bảo có một thiết bị kết nối với máy tính. Nhấn vào biểu tượng Phát màu xanh lục Nút Play của Android Studio dùng để chạy dịch vụ trên thanh trình đơn ở phía trên cùng của màn hình. Thao tác này sẽ khởi chạy ứng dụng mà bạn đang làm việc.

Chuyển đến phần Cài đặt > Hỗ trợ tiếp cận. Global Action Bar Service được cài đặt trên thiết bị của bạn.

Màn hình cài đặt hỗ trợ tiếp cận

Nhấp vào Global Action Bar Service (Dịch vụ thanh thao tác chung) rồi bật dịch vụ này. Bạn sẽ thấy hộp thoại quyền sau:

Hộp thoại cấp quyền cho dịch vụ hỗ trợ tiếp cận.

Dịch vụ hỗ trợ tiếp cận yêu cầu quyền theo dõi hành động của người dùng, truy xuất nội dung trên cửa sổ và thực hiện cử chỉ thay cho người dùng! Khi sử dụng dịch vụ hỗ trợ tiếp cận của bên thứ ba, hãy đảm bảo rằng bạn thực sự tin tưởng nguồn này!

Việc chạy dịch vụ không có nhiều tác dụng vì chúng ta chưa thêm chức năng nào. Hãy bắt đầu làm việc đó.

4. Tạo các nút

Mở action_bar.xml trong res/layout. Thêm mã đánh dấu vào LinearLayout hiện đang trống:

<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>

Thao tác này sẽ tạo ra các nút mà người dùng sẽ nhấn để kích hoạt các hành động trên thiết bị.

Mở GlobalActionBarService.java rồi thêm một biến để lưu trữ bố cục cho thanh thao tác:

public class GlobalActionBarService extends AccessibilityService {
    FrameLayout mLayout;
    ...
}

Bây giờ, hãy thêm phương thức 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);
   }
}

Mã này sẽ mở rộng bố cục và thêm thanh thao tác vào đầu màn hình.

Phương thức onServiceConnected() sẽ chạy khi dịch vụ được kết nối. Tại thời điểm này, dịch vụ hỗ trợ tiếp cận có tất cả các quyền cần thiết để hoạt động. Quyền chính mà bạn sẽ sử dụng ở đây là quyền WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY. Quyền này cho phép bạn vẽ trực tiếp lên màn hình phía trên nội dung hiện có mà không cần phải trải qua quy trình cấp quyền phức tạp.

Vòng đời của Dịch vụ hỗ trợ tiếp cận

Vòng đời của một dịch vụ hỗ trợ tiếp cận chỉ do hệ thống quản lý và tuân theo vòng đời dịch vụ đã thiết lập.

  • Một dịch vụ hỗ trợ tiếp cận sẽ bắt đầu khi người dùng bật dịch vụ đó một cách rõ ràng trong phần cài đặt thiết bị.
  • Sau khi liên kết với một dịch vụ, hệ thống sẽ gọi onServiceConnected(). Các dịch vụ muốn thực hiện thiết lập sau khi liên kết có thể ghi đè phương thức này.
  • Dịch vụ hỗ trợ tiếp cận sẽ dừng khi người dùng tắt dịch vụ này trong phần cài đặt thiết bị hoặc khi dịch vụ này gọi disableSelf().

Chạy dịch vụ

Trước khi có thể chạy dịch vụ bằng Android Studio, bạn cần đảm bảo rằng chế độ cài đặt Chạy được định cấu hình chính xác.

Chỉnh sửa cấu hình Chạy (sử dụng Chạy trong trình đơn trên cùng rồi chuyển đến Chỉnh sửa cấu hình. Sau đó, sử dụng trình đơn thả xuống để thay đổi Lựa chọn khởi chạy từ "Hoạt động mặc định" thành "Không có gì".

Thả xuống để định cấu hình chế độ cài đặt chạy nhằm khởi chạy một dịch vụ bằng Android Studio.

Giờ đây, bạn có thể khởi chạy dịch vụ bằng Android Studio.

Nhấn vào biểu tượng Phát màu xanh lục Nút Play của Android Studio dùng để chạy dịch vụ trên thanh trình đơn ở phía trên cùng của màn hình. Sau đó, hãy truy cập vào phần Cài đặt > Hỗ trợ tiếp cận rồi bật Global Action Bar Service (Dịch vụ thanh thao tác chung).

Bạn sẽ thấy 4 nút tạo nên giao diện người dùng của dịch vụ được phủ lên trên nội dung hiển thị trên màn hình.

overlay.png

Bây giờ, bạn sẽ thêm chức năng cho 4 nút để người dùng có thể chạm vào các nút này để thực hiện các thao tác hữu ích.

5. Định cấu hình nút Nguồn

Thêm phương thức configurePowerButton() vào GlobalActionBarService.java:

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);
       }
   });
}

Để truy cập vào trình đơn nút nguồn, configurePowerButton() sử dụng phương thức performGlobalAction() do AccessibilityService cung cấp. Mã bạn vừa thêm rất đơn giản: khi nhấp vào nút, onClickListener() sẽ kích hoạt. Thao tác này gọi performGlobalAction(GLOBAL_ACTION_POWER_DIALOG) và hiển thị hộp thoại nguồn cho người dùng.

Xin lưu ý rằng các thao tác chung không được liên kết với bất kỳ khung hiển thị nào. Nhấn nút Quay lại, nút Màn hình chính và nút Gần đây là những ví dụ khác về thao tác chung.

Bây giờ, hãy thêm configurePowerButton() vào cuối phương thức onServiceConnected():

@Override
protected void onServiceConnected() {
   ...
   configurePowerButton();
}

Nhấn vào biểu tượng Phát màu xanh lục Nút Play của Android Studio dùng để chạy dịch vụ trên thanh trình đơn ở phía trên cùng của màn hình. Sau đó, hãy truy cập vào Cài đặt > Hỗ trợ tiếp cận rồi khởi động Global Action Bar Service (Dịch vụ thanh thao tác chung).

Nhấn nút Nguồn để hộp thoại nguồn xuất hiện.

6. Định cấu hình nút âm lượng

Thêm phương thức configureVolumeButton() vào GlobalActionBarService.java:

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);
       }
   });
}

Phương thức configureVolumeButton() sẽ thêm một onClickListener() được kích hoạt khi người dùng nhấn nút âm lượng. Trong trình nghe này, configureVolumeButton() sử dụng AudioManager để điều chỉnh âm lượng luồng.

Xin lưu ý rằng bất kỳ ai cũng có thể điều khiển âm lượng (bạn không cần phải là một dịch vụ hỗ trợ tiếp cận để làm việc này).

Bây giờ, hãy thêm configureVolumeButton() vào cuối phương thức onServiceConnected():

@Override
protected void onServiceConnected() {
   ...

   configureVolumeButton();
}

Nhấn vào biểu tượng Phát màu xanh lục Nút Play của Android Studio dùng để chạy dịch vụ trên thanh trình đơn ở phía trên cùng của màn hình. Sau đó, hãy truy cập vào phần Cài đặt > Hỗ trợ tiếp cận rồi bắt đầu Global Action Bar Service (Dịch vụ thanh thao tác chung).

Nhấn vào nút Âm lượng để thay đổi âm lượng.

Giờ đây, người dùng giả định không thể chạm vào các nút điều chỉnh âm lượng ở bên cạnh thiết bị có thể sử dụng Global Action Bar Service (Dịch vụ thanh thao tác chung) để thay đổi (tăng) âm lượng.

7. Định cấu hình nút cuộn

Phần này liên quan đến việc lập trình 2 phương thức. Phương thức đầu tiên tìm một nút có thể cuộn và phương thức thứ hai thay người dùng thực hiện thao tác cuộn.

Thêm phương thức findScrollableNode vào GlobalActionBarService.java:

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;
}

Dịch vụ hỗ trợ tiếp cận không có quyền truy cập vào các khung hiển thị thực tế trên màn hình. Thay vào đó, nó sẽ thấy hình ảnh phản chiếu của nội dung trên màn hình dưới dạng một cây được tạo thành từ các đối tượng AccessibilityNodeInfo. Các đối tượng này chứa thông tin về khung hiển thị mà chúng đại diện (vị trí của khung hiển thị, mọi văn bản liên kết với khung hiển thị, siêu dữ liệu đã được thêm để hỗ trợ tiếp cận, các thao tác mà khung hiển thị hỗ trợ, v.v.). Phương thức findScrollableNode() thực hiện quá trình duyệt theo chiều rộng của cây này, bắt đầu từ nút gốc. Nếu tìm thấy một nút có thể cuộn (tức là một nút hỗ trợ thao tác AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD), thì nút đó sẽ trả về nút đó, nếu không thì nút đó sẽ trả về giá trị rỗng.

Bây giờ, hãy thêm phương thức configureScrollButton() vào GlobalActionBarService.java:

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());
           }
       }
   });
}

Phương thức này tạo một onClickListener() sẽ kích hoạt khi người dùng nhấp vào nút cuộn. Thao tác này cố gắng tìm một nút có thể cuộn và nếu thành công, sẽ thực hiện thao tác cuộn.

Bây giờ, hãy thêm configureScrollButton() vào onServiceConnected():

@Override
protected void onServiceConnected() {
   ...

   configureScrollButton();
}

Nhấn vào biểu tượng Phát màu xanh lục Nút Play của Android Studio dùng để chạy dịch vụ trên thanh trình đơn ở phía trên cùng của màn hình. Sau đó, hãy truy cập vào phần Cài đặt > Hỗ trợ tiếp cận rồi bắt đầu Global Action Bar Service (Dịch vụ thanh thao tác chung).

Nhấn nút quay lại để chuyển đến phần Cài đặt > Hỗ trợ tiếp cận. Các mục trong hoạt động cài đặt hỗ trợ tiếp cận có thể di chuyển và khi bạn chạm vào nút Di chuyển, thao tác di chuyển sẽ được thực hiện. Giờ đây, người dùng giả định của chúng ta không thể dễ dàng thực hiện thao tác cuộn có thể sử dụng nút Cuộn để cuộn qua danh sách các mục.

8. Định cấu hình Nút vuốt

Thêm phương thức configureSwipeButton() vào GlobalActionBarService.java:

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);
       }
   });
}

Phương thức configureSwipeButton() sử dụng một API mới được thêm vào N để thực hiện các cử chỉ thay cho người dùng. Mã này sử dụng đối tượng GestureDescription để chỉ định đường dẫn cho cử chỉ cần thực hiện (các giá trị được mã hoá cứng sẽ được dùng trong lớp học lập trình này), sau đó thay mặt người dùng gửi cử chỉ vuốt bằng phương thức dispatchGesture() của AccessibilityService.

Bây giờ, hãy thêm configureSwipeButton() vào onServiceConnected():

@Override
protected void onServiceConnected() {
   ...
   configureSwipeButton();
}

Nhấn vào biểu tượng Phát màu xanh lục Nút Play của Android Studio dùng để chạy dịch vụ trên thanh trình đơn ở phía trên cùng của màn hình. Sau đó, hãy truy cập vào phần Cài đặt > Hỗ trợ tiếp cận rồi bắt đầu Global Action Bar Service (Dịch vụ thanh thao tác chung).

Cách dễ nhất để kiểm thử chức năng vuốt là mở ứng dụng Maps đã cài đặt trên điện thoại. Sau khi bản đồ tải xong, khi bạn chạm vào nút Vuốt, màn hình sẽ vuốt sang phải.

9. Tóm tắt

Xin chúc mừng! Bạn đã tạo một dịch vụ hỗ trợ tiếp cận đơn giản và hoạt động hiệu quả.

Bạn có thể mở rộng dịch vụ này theo nhiều cách. Ví dụ:

  1. Làm cho thanh thao tác có thể di chuyển (hiện tại, thanh này chỉ nằm ở đầu màn hình).
  2. Cho phép người dùng tăng và giảm âm lượng.
  3. Cho phép người dùng vuốt cả sang trái và sang phải.
  4. Thêm tính năng hỗ trợ cho các cử chỉ khác mà thanh thao tác có thể phản hồi.

Lớp học lập trình này chỉ đề cập đến một phần nhỏ trong số các chức năng do API hỗ trợ tiếp cận cung cấp. API này cũng bao gồm những nội dung sau (danh sách chưa đầy đủ):

  • Hỗ trợ nhiều cửa sổ.
  • Hỗ trợ AccessibilityEvent. Khi giao diện người dùng thay đổi, các dịch vụ hỗ trợ tiếp cận sẽ được thông báo về những thay đổi đó bằng các đối tượng AccessibilityEvent. Sau đó, dịch vụ có thể phản hồi một cách thích hợp đối với các thay đổi về giao diện người dùng.
  • Có thể kiểm soát mức phóng to.

Lớp học lập trình này sẽ giúp bạn bắt đầu viết một dịch vụ hỗ trợ tiếp cận. Nếu biết một người dùng gặp phải các vấn đề cụ thể về khả năng hỗ trợ tiếp cận mà bạn muốn giải quyết, thì giờ đây, bạn có thể tạo một dịch vụ để giúp người dùng đó.