Việc yêu cầu cấp quyền trên Wear OS cũng tương tự như trên ứng dụng di động, cộng với một vài trường hợp sử dụng bổ sung. Tài liệu này giả định rằng bạn hiểu rõ cách hoạt động của các quyền trên Android. Nếu không, hãy xem lại cách hoạt động của các quyền trên Android.
Cũng giống như trong ứng dụng di động, người dùng phải cấp quyền truy cập vào một số chức năng cho ứng dụng Wear. Trong ứng dụng Wear, hãy cung cấp chức năng đáng giá mà không cần yêu cầu quyền nào.
Các trường hợp cấp quyền
Bạn có thể gặp phải một số trường hợp khi yêu cầu quyền nguy hiểm trên Wear OS:
Ứng dụng Wear yêu cầu cấp quyền cho một ứng dụng chạy trên thiết bị đeo.
Ứng dụng Wear yêu cầu cấp quyền cho một ứng dụng chạy trên điện thoại.
Ứng dụng điện thoại yêu cầu cấp quyền cho một ứng dụng chạy trên thiết bị đeo.
Ứng dụng điện thoại yêu cầu nhiều quyền chỉ có thể dùng khi thiết bị đeo được kết nối.
Để xem tất cả các tình huống này trong một ứng dụng đang hoạt động, hãy xem lại ExcersizeSampleCompose mẫu trên GitHub.
Phần sau đây giải thích cho từng trường hợp. Để biết thêm thông tin chi tiết về cách yêu cầu cấp quyền, hãy xem phần Mẫu yêu cầu cấp quyền.
Ứng dụng Wear yêu cầu quyền truy cập cho thiết bị đeo
Khi ứng dụng Wear yêu cầu cấp quyền cho một ứng dụng chạy trên thiết bị đeo, hệ thống sẽ hiển thị hộp thoại để nhắc người dùng cấp quyền đó. Trong ứng dụng của bạn, chỉ yêu cầu cấp quyền khi người dùng đã biết rõ lý do cần sử dụng những quyền đó để thực hiện một thao tác cụ thể.
Xem nguyên tắc cấp quyền để đảm bảo bạn mang đến trải nghiệm tốt nhất cho người dùng, đồng thời nhớ kiểm tra shouldShowRequestPermissionRationale()
và cung cấp thêm thông tin nếu cần.
Nếu một ứng dụng hoặc mặt đồng hồ yêu cầu nhiều quyền cùng một lúc, thì các yêu cầu cấp quyền sẽ lần lượt xuất hiện.
![Nhiều màn hình quyền, lần lượt từng màn hình.](https://developer.android.com/static/images/training/wear/multiple_permissions.png?authuser=9&hl=vi)
Ứng dụng Wear sẽ yêu cầu quyền truy cập trên điện thoại
Khi ứng dụng Wear yêu cầu quyền truy cập vào điện thoại (ví dụ: một ứng dụng cho thiết bị đeo muốn truy cập vào ảnh hoặc các dữ liệu nhạy cảm khác trên phiên bản ứng dụng di động), thì ứng dụng Wear phải chuyển người dùng đến điện thoại để chấp nhận yêu cầu cấp quyền này. Ở đó, ứng dụng điện thoại có thể cung cấp thêm thông tin cho người dùng bằng cách sử dụng một hoạt động. Hoạt động đó có 2 nút: một nút để cấp quyền và một nút để từ chối cấp quyền.
![Ứng dụng Wear sẽ chuyển người dùng đến điện thoại để cấp quyền.](https://developer.android.com/static/images/training/wear/open_on_phone.png?authuser=9&hl=vi)
Ứng dụng điện thoại yêu cầu quyền truy cập vào thiết bị đeo
Nếu người dùng đang dùng ứng dụng điện thoại và ứng dụng đó cần có quyền truy cập vào thiết bị đeo, chẳng hạn như để tải trước nhạc trong trường hợp điện thoại bị ngắt kết nối, thì ứng dụng điện thoại phải chuyển người dùng đến thiết bị đeo để chấp nhận cấp quyền. Phiên bản ứng dụng dành cho thiết bị đeo sẽ sử dụng phương thức requestPermissions()
để kích hoạt hộp thoại cấp quyền hệ thống.
![Ứng dụng điện thoại sẽ chuyển người dùng đến thiết bị đeo để cấp quyền.](https://developer.android.com/static/images/training/wear/phone_requests_wear.png?authuser=9&hl=vi)
Ứng dụng điện thoại yêu cầu cấp nhiều quyền cùng lúc
![](https://developer.android.com/static/images/training/wear/companion-device-profile.png?authuser=9&hl=vi)
Các ứng dụng của đối tác trên Android 12 (API cấp 31) trở lên có thể sử dụng hồ sơ của thiết bị đồng hành khi kết nối với đồng hồ. Việc sử dụng hồ sơ giúp đơn giản hoá quá trình đăng ký bằng cách nhóm việc cấp một nhóm quyền theo loại thiết bị cụ thể trong một bước.
Các quyền đi kèm sẽ được cấp cho ứng dụng đồng hành sau khi thiết bị kết nối và chỉ có hiệu lực khi thiết bị được liên kết. Việc xoá ứng dụng hoặc xoá các liên kết cũng là xoá các quyền. Để biết thông tin chi tiết, hãy xem AssociationRequest.Builder.setDeviceProfile()
.
Mẫu yêu cầu cấp quyền
Có nhiều mẫu yêu cầu người dùng cấp quyền. Theo mức độ ưu tiên, các mẫu này là:
Yêu cầu tùy theo bối cảnh khi rõ ràng là cần có quyền để dùng một chức năng cụ thể nhưng xét về tổng thể thì chưa cần đến quyền này để chạy ứng dụng.
Giải thích tùy theo bối cảnh khi lý do yêu cầu cấp quyền không rõ ràng và xét về tổng thể thì chưa cần đến quyền này để chạy ứng dụng.
Những mẫu này được giải thích trong những phần sau.
Yêu cầu tùy theo bối cảnh
Yêu cầu cấp quyền khi người dùng đã biết rõ lý do cần có quyền đó để thực hiện một thao tác cụ thể. Nhiều khả năng người dùng sẽ cấp quyền khi họ hiểu mối liên hệ của quyền đó với tính năng mà họ muốn sử dụng.
Ví dụ: một ứng dụng có thể cần đến thông tin vị trí của người dùng để hiển thị các địa điểm đáng quan tâm ở gần đó. Khi người dùng nhấn để tìm kiếm các địa điểm lân cận, ứng dụng có thể yêu cầu quyền truy cập thông tin vị trí ngay lập tức vì có mối liên hệ rõ ràng giữa việc tìm kiếm các địa điểm lân cận và nhu cầu cấp quyền truy cập thông tin vị trí. Sự rõ ràng của mối liên hệ này giúp ứng dụng không cần thiết phải hiển thị các màn hình hướng dẫn bổ sung.
![Ứng dụng yêu cầu cấp quyền khi thực sự cần thiết.](https://developer.android.com/static/images/training/wear/ask_in_context.png?authuser=9&hl=vi)
Giải thích tùy theo bối cảnh
Hình 6 minh hoạ một ví dụ về việc giải thích tùy theo bối cảnh. Ứng dụng không yêu cầu cấp quyền để bắt đầu sử dụng bộ tính giờ, nhưng có một chỉ dẫn cùng dòng cho biết một phần của hoạt động (phát hiện vị trí) đang bị khoá. Khi người dùng nhấn vào lời nhắc, một màn hình yêu cầu cấp quyền sẽ xuất hiện, cho phép người dùng mở khoá thông tin vị trí của bạn.
Sử dụng phương thức shouldShowRequestPermissionRationale()
để giúp ứng dụng của bạn quyết định có nên cung cấp thêm thông tin hay không. Để biết thêm thông tin chi tiết, vui lòng xem phần Yêu cầu cấp quyền. Ngoài ra, bạn có thể kiểm tra cách ứng dụng mẫu loa trên GitHub xử lý việc hiển thị thông tin.
![Khi cần phải có quyền này, ứng dụng sẽ giải thích lý do quyền này cần thiết.](https://developer.android.com/static/images/training/wear/educate_in_context.png?authuser=9&hl=vi)
Xử lý khi yêu cầu cấp quyền bị từ chối
Nếu người dùng từ chối cấp quyền được yêu cầu (quyền này không quan trọng đối với một hoạt động dự định), thì đừng ngăn họ tiếp tục hoạt động đó. Nếu một số phần nhất định của hoạt động bị tắt do yêu cầu cấp quyền bị từ chối, hãy cung cấp phản hồi thiết thực bằng hình ảnh.
Hình 7 minh hoạ việc sử dụng biểu tượng khoá để cho biết tính năng bị khoá vì người dùng không cấp quyền để sử dụng tính năng đó.
![Khi người dùng từ chối cấp quyền, biểu tượng khoá sẽ hiển thị cùng với tính năng có liên quan.](https://developer.android.com/static/images/training/wear/deny.png?authuser=9&hl=vi)
Khi hộp thoại cấp quyền cho thiết bị đeo bị từ chối trước đó xuất hiện lần thứ hai, hộp thoại đó sẽ có tuỳ chọn Từ chối, không hiển thị lại. Nếu người dùng chọn tuỳ chọn này, thì cách duy nhất để họ cấp quyền này trong tương lai là truy cập vào ứng dụng Cài đặt trên thiết bị đeo.
![Hệ thống đề nghị ngừng yêu cầu cấp quyền.](https://developer.android.com/static/images/training/wear/ask_again.png?authuser=9&hl=vi)
Tìm hiểu thêm về cách xử lý việc từ chối cấp quyền.
Quyền đối với các dịch vụ
Chỉ một hoạt động mới có thể gọi phương thức requestPermissions()
, vì vậy, nếu người dùng tương tác với ứng dụng bằng một dịch vụ, chẳng hạn như thông qua mặt đồng hồ, thì dịch vụ đó phải mở hoạt động thì mới yêu cầu cấp quyền được. Trong hoạt động này, hãy cung cấp thêm phần giải thích về lý do cần đến quyền này.
Nói chung, đừng yêu cầu cấp quyền cho mặt đồng hồ. Thay vào đó, hãy triển khai chức năng và cho phép người dùng chọn dữ liệu sẽ hiển thị thông qua chức năng đó.
Cài đặt
Người dùng có thể thay đổi quyền của ứng dụng Wear trong phần Cài đặt bất cứ lúc nào. Khi người dùng cố thực hiện một việc gì đó cần có quyền, trước tiên, hãy gọi phương thức checkSelfPermission()
để xem ứng dụng có quyền thực hiện thao tác đó hay không.
Hãy thực hiện bước kiểm tra này ngay cả khi trước đó người dùng đã cấp quyền, vì sau đó người dùng có thể đã thu hồi quyền này.
![Người dùng có thể thay đổi các quyền thông qua ứng dụng Cài đặt.](https://developer.android.com/static/images/training/wear/for_settings.png?authuser=9&hl=vi)
Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- Yêu cầu quyền khi bắt đầu chạy
- Quyền truy cập Bluetooth
- Giao tiếp trong nền