Normal Permission trong Android — nó là gì, các cấp độ bảo vệ và nguyên lý hoạt động

Tác giả: IT Sectr Đã đăng: 2026-05-20 Thời gian đọc: 8 phút

Normal Permission là một danh mục quyền trong Android mà hệ thống tự động cấp mà không cần hỏi người dùng. Theo Android Developer Documentation, 2024, các quyền thông thường có ProtectionLevel normal và không yêu cầu hộp thoại runtime, khác với các quyền nguy hiểm. Chúng bao gồm quyền truy cập internet, trạng thái mạng và rung, mà không tạo rủi ro cho dữ liệu nhạy cảm của người dùng.

Ý chính

  • Normal Permission là một danh mục quyền Android với ProtectionLevel normal, được cấp tự động khi cài đặt.
  • Để sử dụng, chỉ cần thêm uses-permission vào tệp kê khai — không có hộp thoại nào hiện ra với người dùng.
  • Sự khác biệt chính so với quyền nguy hiểm là không có yêu cầu runtime và không thể thu hồi qua cài đặt.
  • Danh sách bao gồm INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE và các hằng số hệ thống khác.
  • Bạn có thể kiểm tra mức bảo vệ qua PackageManager.getPermissionInfo trong mã nguồn ứng dụng.

Normal Permission trong Android là gì

Normal Permission là một loại quyền hệ thống trong Android với ProtectionLevel normal, được cấp cho ứng dụng tự động tại thời điểm cài đặt. Nhà phát triển không cần viết mã để yêu cầu nó — chỉ cần khai báo quyền trong AndroidManifest.xml. Người dùng không thấy hộp thoại nào và không thể thu hồi một quyền thông thường riêng lẻ, chỉ bằng cách gỡ bỏ toàn bộ ứng dụng.

Hệ thống Android phân loại các quyền thông thường là rủi ro thấp — chúng không cấp quyền truy cập vào dữ liệu cá nhân, máy ảnh hoặc micrô. Ví dụ điển hình: truy cập internet, điều khiển rung, đọc trạng thái Wi-Fi. Theo Android Security Model (2024), khoảng 40 phần trăm tổng số quyền hệ thống thuộc danh mục thông thường.

Một thuộc tính quan trọng — các quyền thông thường không thể bị thu hồi trong thời gian chạy qua Cài đặt. Nếu người dùng muốn từ chối quyền truy cập, cách duy nhất là gỡ bỏ ứng dụng. Các nhà phát triển nên xem xét điều này trong kiến trúc, nhưng đối với người dùng, cách tiếp cận này đơn giản hóa tương tác: không có hộp thoại khi khởi chạy lần đầu.

Lịch sử của danh mục

Sự phân chia thành quyền thông thường và nguy hiểm xuất hiện trong Android 6.0 Marshmallow (API 23). Trước phiên bản này, tất cả các quyền đều được yêu cầu khi cài đặt — người dùng thấy một danh sách duy nhất và chấp nhận hoặc từ chối toàn bộ. Normal Permission giữ lại mô hình này cho các hoạt động rủi ro thấp, trong khi Dangerous chuyển sang yêu cầu runtime. Thay đổi này cải thiện trải nghiệm người dùng và đồng thời tăng cường bảo mật.

Những API nào yêu cầu Normal Permission

Nhiều API hệ thống Android yêu cầu khai báo rõ ràng một quyền thông thường, ngay cả khi quyền truy cập là tự động. Ví dụ, lớp ConnectivityManager yêu cầu ACCESS_NETWORK_STATE, VibratorService yêu cầu VIBRATE, WifiManager yêu cầu ACCESS_WIFI_STATE. Nếu không khai báo uses-permission tương ứng, việc gọi các API này sẽ dẫn đến SecurityException.

Cách hoạt động của ProtectionLevel normal

ProtectionLevel normal là mức bảo vệ tối thiểu trong Hệ thống quyền Android. Các quyền ở mức này được khai báo trong tệp kê khai, và hệ thống kiểm tra khai báo khi cài đặt, cấp quyền truy cập mà không cần sự can thiệp của người dùng. Không có thành phần giao diện nào được hiển thị, không có callback nào được gọi.

Cơ chế kiểm tra hoạt động ở cấp PackageManager. Trong quá trình cài đặt APK, hệ thống quét tất cả các thẻ uses-permission, xác định mức bảo vệ của từng quyền bằng cách đối chiếu với các định nghĩa hệ thống trong các tệp permissions.xml, và đối với mức thông thường chỉ cần đăng ký quyền truy cập. Quá trình mất mili giây và không yêu cầu tương tác với giao diện người dùng.

Thuật toán cấp quyền hoạt động như sau:

  • Hệ thống đọc tệp kê khai tại thời điểm cài đặt ứng dụng
  • Nó đối chiếu protectionLevel trong /etc/permissions/ trên thiết bị
  • Nếu giá trị là normal — tự động cấp quyền truy cập
  • Quyền vẫn hoạt động cho đến khi ứng dụng bị gỡ bỏ hoàn toàn

Người dùng không thể thu hồi quyền thông thường qua giao diện. Trong cài đặt ứng dụng, trong phần Quyền, chỉ có các quyền nguy hiểm được hiển thị. Điều này trái ngược với iOS, nơi mỗi quyền yêu cầu xác nhận riêng biệt bất kể mức độ nhạy cảm của chức năng.

Normal Permission vs Dangerous Permission

Normal và Dangerous Permission là hai danh mục bảo vệ đối lập trong Android. Sự khác biệt chính nằm ở phương thức cấp: quyền thông thường được cấp tự động khi cài đặt, quyền nguy hiểm yêu cầu sự đồng ý rõ ràng thông qua hộp thoại runtime. Sự phân biệt này được xây dựng trong kiến trúc bảo mật Android từ phiên bản 6.0 Marshmallow.

So sánh các đặc điểm chính:

Đặc điểmNormal PermissionDangerous Permission
ProtectionLevelnormaldangerous
Yêu cầu người dùngKhông yêu cầuHộp thoại runtime bắt buộc
Khả năng thu hồiKhông, chỉ gỡ ứng dụngCó, qua cài đặt bất kỳ lúc nào
Kiểm tra trong mãLuôn PERMISSION_GRANTEDcheckSelfPermission bắt buộc
Ví dụINTERNET, VIBRATE, ACCESS_NETWORK_STATECAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION

Khác biệt trong yêu cầu người dùng

Người dùng không thấy hộp thoại nào khi yêu cầu Normal Permission. Nếu ứng dụng cần INTERNET — nó nhận được một cách im lặng. Đối với Dangerous Permission, hệ thống hiển thị hộp thoại phương thức mô tả quyền truy cập được yêu cầu. Người dùng nhấn Cho phép hoặc Từ chối, và sau đó có thể thu hồi quyền bất kỳ lúc nào qua Cài đặt. Đây là sự khác biệt UX chính quyết định chiến lược phát triển giao diện.

Khi nào chọn Normal

Normal nên được sử dụng trong tất cả các trường hợp mà quyền truy cập không liên quan đến dữ liệu nhạy cảm. ACCESS_NETWORK_STATE để kiểm tra kết nối, VIBRATE cho phản hồi xúc giác, INTERNET cho các yêu cầu HTTP — tất cả đều là quyền thông thường. Sử dụng mức dangerous ở nơi normal đủ là thói quen xấu, tạo ra các hộp thoại không cần thiết và làm giảm lòng tin của người dùng vào ứng dụng.

Danh sách quyền thông thường trong Android

Android định nghĩa hàng chục quyền thông thường, mỗi quyền tương ứng với một chức năng hệ thống cụ thể. Tất cả đều có sẵn thông qua các hằng số của lớp Manifest.permission. Dưới đây là danh sách các quyền thường được sử dụng nhất trong phát triển ứng dụng.

Hằng sốTruy cậpMô tả
INTERNETMạngMở socket mạng cho các yêu cầu HTTP
ACCESS_NETWORK_STATEMạngLấy thông tin về trạng thái mạng
ACCESS_WIFI_STATEWi-FiĐọc thông tin về kết nối Wi-Fi
VIBRATERungĐiều khiển bộ rung thiết bị
BLUETOOTHBluetoothKết nối với thiết bị Bluetooth
WAKE_LOCKNguồnNgăn bộ xử lý chuyển sang chế độ ngủ
SET_ALARMBáo thứcĐặt báo thức qua AlarmManager
CHANGE_NETWORK_STATEMạngThay đổi trạng thái kết nối mạng

Nhóm quyền thông thường

Các quyền thông thường không được nhóm thành Permission Group cho mục đích hiển thị trên giao diện. Các nhóm trong Android dành cho màn hình cài đặt, nơi chỉ hiển thị các quyền nguy hiểm. Tuy nhiên, các quyền thông thường có thể được phân chia logic thành các danh mục: mạng (INTERNET, ACCESS_NETWORK_STATE), phần cứng (VIBRATE, WAKE_LOCK), hệ thống (SET_ALARM) và quyền Bluetooth.

Một số hằng số trong Manifest.permission có thể thay đổi mức bảo vệ trên các phiên bản Android khác nhau. Ví dụ, BLUETOOTH_CONNECT trên Android 12+ đã trở thành quyền nguy hiểm với yêu cầu runtime, mặc dù trên các phiên bản cũ hơn nó là thông thường. Các nhà phát triển nên kiểm tra protectionLevel hiện tại cho API mục tiêu thông qua tài liệu.

Kiểm tra Normal Permission qua PackageManager

Nhà phát triển có thể kiểm tra theo chương trình xem quyền có bình thường không qua PackageManager. Phương thức getPermissionInfo trả về PermissionInfo có trường protectionLevel chứa cờ PermissionInfo.PROTECTION_NORMAL. Điều này hữu ích cho xử lý động và gỡ lỗi.

kotlin
fun isNormalPermission(permission: String): Boolean {
    val pm = packageManager
    val info = pm.getPermissionInfo(
        permission,
        PackageManager.GET_META_DATA
    )
    return info.protectionLevel ==
        PermissionInfo.PROTECTION_NORMAL
}

Cách khai báo Normal Permission trong tệp kê khai

Khai báo Normal Permission trong AndroidManifest.xml là thao tác đơn giản nhất, chỉ cần một thẻ uses-permission. Không cần cấu hình protectionLevel bổ sung, vì mức bảo vệ được xác định bởi định nghĩa hệ thống, không phải bởi tệp kê khai ứng dụng. Nhà phát triển chỉ cần chỉ định tên đầy đủ của hằng số.

xml
<!-- AndroidManifest.xml -->
<uses-permission
    android:name="android.permission.INTERNET" />
<uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
    android:name="android.permission.VIBRATE" />

Hệ thống xử lý tất cả các khai báo khi cài đặt. Nếu ít nhất một trong các quyền đã khai báo có protectionLevel khác normal, thì sẽ cần có yêu cầu runtime. INTERNET là quyền thông thường phổ biến nhất, có mặt trong hầu hết các ứng dụng Android, đặc biệt là những ứng dụng thực hiện yêu cầu HTTP hoặc tải nội dung từ mạng.

Ví dụ về tệp kê khai hoàn chỉnh

Một ví dụ đầy đủ về AndroidManifest.xml với các quyền thông thường và nguy hiểm cho thấy sự khác biệt: về cú pháp, các thẻ uses-permission giống nhau, nhưng trong thời gian chạy INTERNET và VIBRATE sẽ được cấp tự động, trong khi CAMERA sẽ yêu cầu hộp thoại.

xml
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Normal permissions -->
    <uses-permission
        android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.VIBRATE" />

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

Manifest Merger và Normal Permission

Khi sử dụng các thư viện — Google Play Services, Firebase, Glide — chúng có thể thêm uses-permission riêng vào tệp kê khai cuối cùng thông qua Manifest Merger. Một số là thông thường (INTERNET cho Firebase), số khác là nguy hiểm (ACCESS_FINE_LOCATION cho Google Maps). Nhà phát triển nên kiểm tra tệp kê khai hợp nhất cuối cùng trong build/outputs/logs/manifest-merger-report.txt trước khi xuất bản.

Hạn chế của Normal Permission

Normal Permission có hai hạn chế cơ bản: không thể thu hồi bởi người dùng và không có giao diện quản lý. Nếu người dùng không tin tưởng ứng dụng nhưng quyền thông thường đã được cấp tự động — giải pháp duy nhất là gỡ bỏ ứng dụng. Điều này tạo ra một rủi ro nhất định, vì các quyền thông thường không thể bị chặn bằng các phương tiện tiêu chuẩn của Android.

Một hạn chế bổ sung xuất hiện trên các thiết bị có nhiều hồ sơ (Work Profile, Multiple Users). Normal Permission được cấp cho tất cả các hồ sơ cùng một lúc — ứng dụng không thể giới hạn quyền chỉ cho một hồ sơ. Trong các kịch bản doanh nghiệp, điều này được giải quyết thông qua Managed Configurations.

Không thể kiểm tra xem ứng dụng có đang sử dụng Normal Permission tại một thời điểm nhất định hay không. Phương thức hệ thống checkSelfPermission chỉ hoạt động cho các quyền nguy hiểm. Đối với quyền thông thường, nó luôn trả về PERMISSION_GRANTED, không phản ánh hoạt động thực tế. Điều này cần được xem xét trong các cuộc kiểm toán bảo mật và phân tích hành vi ứng dụng.

Cũng cần nhớ rằng một số nhà sản xuất thiết bị (Xiaomi, Huawei, Samsung) sửa đổi hành vi tiêu chuẩn của các quyền. Trên phần mềm của họ, Normal Permission có thể yêu cầu các quyền bổ sung trong giao diện MIUI hoặc EMUI độc quyền. Các nhà phát triển nên kiểm thử trên các thiết bị thực tế của các nhà sản xuất khác nhau.

Câu hỏi thường gặp

Normal Permission khác gì so với Dangerous?

Normal Permission được cấp tự động khi cài đặt mà không có hộp thoại. Dangerous yêu cầu yêu cầu runtime với sự đồng ý rõ ràng của người dùng và có thể bị thu hồi qua cài đặt. Normal sử dụng ProtectionLevel normal, Dangerous sử dụng protectionLevel dangerous.

Tôi có cần viết mã cho Normal Permission không?

Không, đối với quyền thông thường, chỉ cần khai báo uses-permission trong AndroidManifest.xml. Không cần mã yêu cầu — hệ thống tự động cấp quyền truy cập. Điều này phân biệt chúng với các quyền nguy hiểm, nơi cần ActivityCompat.requestPermissions.

Những Normal Permission nào phổ biến nhất?

Những quyền được sử dụng nhiều nhất: INTERNET (yêu cầu mạng), ACCESS_NETWORK_STATE (kiểm tra kết nối), VIBRATE (phản hồi xúc giác) và WAKE_LOCK (giữ bộ xử lý thức). Hầu như mọi ứng dụng Android đều sử dụng ít nhất INTERNET.

Có thể thu hồi Normal Permission không?

Không, Normal Permission không thể bị thu hồi qua cài đặt ứng dụng. Cách duy nhất để ngừng quyền truy cập là gỡ bỏ ứng dụng. Đây là sự khác biệt chính so với các quyền nguy hiểm mà người dùng có thể vô hiệu hóa bất kỳ lúc nào.

Làm thế nào để kiểm tra ProtectionLevel của quyền?

Sử dụng PackageManager.getPermissionInfo, truyền tên chuỗi của quyền. Phương thức trả về PermissionInfo với trường protectionLevel. So sánh nó với các hằng số PermissionInfo.PROTECTION_NORMAL hoặc PROTECTION_DANGEROUS để xác định danh mục.

Tổng kết

  • Normal Permission là danh mục quyền Android với ProtectionLevel normal, được cấp tự động khi cài đặt.
  • Để khai báo, chỉ cần thẻ uses-permission trong AndroidManifest.xml mà không cần mã runtime.
  • Chúng khác với quyền nguy hiểm ở chỗ không có hộp thoại, không thể thu hồi và mức rủi ro thấp.
  • Phổ biến nhất: INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE và WAKE_LOCK.
  • ProtectionLevel được kiểm tra qua PackageManager.getPermissionInfo trong mã.
  • Quyền thông thường không được hiển thị trong màn hình cài đặt ứng dụng.
  • Khi sử dụng thư viện, hãy kiểm tra tệp kê khai cuối cùng qua Manifest Merger.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm