Khai báo quyền cho ứng dụng

Như đã đề cập trong quy trình công việc để sử dụng quyền, nếu ứng dụng của bạn yêu cầu quyền cho ứng dụng, bạn phải khai báo các quyền này trong tệp kê khai của ứng dụng. Nội dung khai báo này giúp cửa hàng ứng dụng và người dùng nắm được tập hợp các quyền mà ứng dụng của bạn có thể yêu cầu.

Quy trình yêu cầu cấp quyền sẽ phụ thuộc vào loại quyền:

Thêm nội dung khai báo vào tệp kê khai ứng dụng

Để khai báo quyền mà ứng dụng của bạn có thể yêu cầu, hãy đưa phần tử <uses-permission> thích hợp vào tệp kê khai của ứng dụng. Ví dụ: Một ứng dụng cần quyền truy cập vào máy ảnh sẽ có dòng sau đây trong AndroidManifest.xml:

<manifest ...>
    <uses-permission android:name="android.permission.CAMERA"/>
    <application ...>
        ...
    </application>
</manifest>

Khai báo phần cứng là không bắt buộc

Một số quyền, chẳng hạn như CAMERA, cho phép ứng dụng của bạn truy cập vào các phần cứng mà chỉ một số thiết bị Android mới có. Nếu ứng dụng của bạn khai báo một trong các quyền này liên quan đến phần cứng, hãy xem xét khả năng ứng dụng của bạn chạy được trên thiết bị không có phần cứng đó. Trong hầu hết các trường hợp, phần cứng là không bắt buộc. Vì vậy, bạn nên khai báo phần cứng là không bắt buộc bằng cách đặt android:required thành false trong nội dung khai báo <uses-feature>, như trong đoạn mã sau của tệp AndroidManifest.xml:

<manifest ...>
    <application>
        ...
    </application>
    <uses-feature android:name="android.hardware.camera"
                  android:required="false" />
<manifest>

Xác định tính sẵn có của phần cứng

Nếu bạn khai báo phần cứng là không bắt buộc, thì ứng dụng của bạn có thể chạy trên thiết bị không có phần cứng đó. Để kiểm tra xem thiết bị có một phần cứng cụ thể hay không, hãy sử dụng phương thức hasSystemFeature(), như trong đoạn mã sau đây. Nếu không có phần cứng, hãy linh hoạt tắt tính năng đó trong ứng dụng của bạn.

Kotlin

// Check whether your app is running on a device that has a front-facing camera.
if (applicationContext.packageManager.hasSystemFeature(
        PackageManager.FEATURE_CAMERA_FRONT)) {
    // Continue with the part of your app's workflow that requires a
    // front-facing camera.
} else {
    // Gracefully degrade your app experience.
}

Java

// Check whether your app is running on a device that has a front-facing camera.
if (getApplicationContext().getPackageManager().hasSystemFeature(
        PackageManager.FEATURE_CAMERA_FRONT)) {
    // Continue with the part of your app's workflow that requires a
    // front-facing camera.
} else {
    // Gracefully degrade your app experience.
}

Khai báo quyền theo cấp độ API

Nếu bạn muốn chỉ khai báo quyền trên các thiết bị hỗ trợ quyền khi bắt đầu chạy, tức là các thiết bị chạy Android 6.0 (API cấp 23) trở lên, hãy thêm phần tử <uses-permission-sdk-23> thay vì phần tử <uses-permission>.

Khi sử dụng một trong hai phần tử này, bạn có thể đặt thuộc tính maxSdkVersion để cho biết rằng các thiết bị sẽ không cần quyền cụ thể nếu đang chạy phiên bản Android cao hơn giá trị đã chỉ định. Làm như vậy giúp bạn loại bỏ những quyền không cần thiết trong khi vẫn đảm bảo khả năng tương thích cho các thiết bị cũ.

Ví dụ: ứng dụng của bạn có thể hiển thị nội dung nghe nhìn, chẳng hạn như ảnh hoặc video, mà người dùng đã tạo trong khi dùng ứng dụng. Trong trường hợp này, bạn không cần sử dụng quyền READ_EXTERNAL_STORAGE trên những thiết bị chạy Android 10 (API cấp 29) trở lên, miễn là ứng dụng của bạn nhắm mục tiêu đến Android 10 trở lên. Tuy nhiên, để tương thích với các thiết bị cũ, bạn có thể khai báo quyền READ_EXTERNAL_STORAGE và đặt android:maxSdkVersion thành 28.