Ứng dụng nhắm đến Android 13 (API cấp 33) trở lên và quản lý kết nối Wi-Fi
nên yêu cầu
NEARBY_WIFI_DEVICES
quyền khi bắt đầu chạy. Chiến dịch này
quyền giúp bạn dễ dàng hơn trong việc xác minh quyền truy cập của một ứng dụng vào các thiết bị Wi-Fi lân cận;
trên các phiên bản Android trước, các ứng dụng này cần khai báo
ACCESS_FINE_LOCATION
thay thế.
Quyền là một phần của nhóm thiết bị ở gần
Quyền NEARBY_WIFI_DEVICES
là một phần của Thiết bị ở gần
nhóm quyền. Nhóm này, được thêm vào Android 12 (API cấp 31), cũng bao gồm
các quyền liên quan đến Bluetooth và Băng tần siêu rộng. Khi bạn yêu cầu bất kỳ
tổ hợp các quyền từ nhóm quyền này, hệ thống sẽ hiển thị một
thời gian chạy và yêu cầu người dùng phê duyệt quyền truy cập của ứng dụng vào các thiết bị ở gần.
Trong phần cài đặt hệ thống, người dùng phải bật và tắt Thiết bị ở gần
quyền với tư cách nhóm; ví dụ: người dùng không thể vô hiệu hoá quyền truy cập Wi-Fi nhưng vẫn tiếp tục
Đã bật quyền truy cập Bluetooth cho một ứng dụng cụ thể.
Xác nhận chắc chắn rằng ứng dụng của bạn không lấy dữ liệu vị trí thực tế
Khi bạn nhắm đến Android 13 trở lên, hãy cân nhắc xem ứng dụng của bạn có
nhận được thông tin vị trí từ các API Wi-Fi; nếu không, bạn nên thực sự
hãy xác nhận điều đó. Để đưa ra khẳng định này, hãy đặt thuộc tính usesPermissionFlags
thành
neverForLocation
trong tệp kê khai của ứng dụng, như minh hoạ trong mã sau
đoạn trích. Quá trình này tương tự như quy trình bạn thực hiện khi
xác nhận rằng thông tin thiết bị Bluetooth không bao giờ được dùng để truy cập thông tin vị trí:
<manifest ...> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" /> <application ...> ... </application> </manifest>
Các phiên bản trước và một số API yêu cầu quyền truy cập thông tin vị trí
Một số API Wi-Fi yêu cầu quyền ACCESS_FINE_LOCATION
, ngay cả khi
ứng dụng nhắm đến Android 13 trở lên. Sau đây là một số ví dụ:
các phương thức từ lớp WifiManager
:
Ngoài ra, vì quyền NEARBY_WIFI_DEVICES
chỉ có trên
Android 13 trở lên, bạn nên giữ lại mọi nội dung khai báo cho
ACCESS_FINE_LOCATION
để cung cấp khả năng tương thích ngược trong ứng dụng của bạn. Tuy nhiên, miễn là ứng dụng của bạn
không dựa vào
thông tin vị trí chính xác, bạn có thể
đặt phiên bản SDK tối đa của quyền này thành 32
, như minh hoạ trong
đoạn mã sau:
<manifest ...> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="32" /> <application ...> ... </application> </manifest>
Kiểm tra các API yêu cầu quyền đó
Nếu ứng dụng của bạn nhắm đến Android 13 trở lên, bạn phải khai báo
Quyền NEARBY_WIFI_DEVICES
để gọi bất kỳ API Wi-Fi nào sau đây:
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
Quy trình truy cập Wi-Fi
Hình 1 hiển thị quy trình truy cập Wi-Fi trên các thiết bị chạy
Android 13 trở lên, đối với những ứng dụng nhắm đến
Android 13 trở lên. Xin lưu ý rằng, miễn là bạn xác nhận rằng
ứng dụng không lấy thông tin vị trí thực tế từ thông tin thiết bị Wi-Fi,
cần khai báo quyền ACCESS_FINE_LOCATION
nữa:
Hình 2 minh hoạ quy trình truy cập Wi-Fi trên các thiết bị chạy
12L trở xuống. Lưu ý sự phụ thuộc vào
Quyền ACCESS_FINE_LOCATION
.