Từ Android 6.0 (API 23), quyền nguy hiểm (vị trí, camera, mic, danh bạ) phải xin lúc chạy, không chỉ khai trong manifest.
Luồng chuẩn:
1. Khai báo quyền trong AndroidManifest.xml.
2. Kiểm tra đã có chưa (checkSelfPermission).
3. Nếu chưa, cân nhắc hiện lý do (shouldShowRequestPermissionRationale) khi ngữ cảnh cần.
4. Xin quyền bằng ActivityResultContracts.RequestPermission (khuyến nghị) và xử lý kết quả cho phép/từ chối.
Nguyên tắc UX:
- Xin quyền đúng ngữ cảnh (ngay trước khi dùng), giải thích lợi ích, xử lý mượt khi bị từ chối.
- Có quyền cấp một lần (Android 11+) và hệ thống tự thu hồi quyền của app lâu không dùng (Android 13+).
Hay hỏi: khác biệt normal vs dangerous permission, và xử lý khi người dùng chọn "Không hỏi lại".