Tôi phải đối mặt với cùng một vấn đề. Có hai loại quyền trong Android:
- Nguy hiểm (truy cập vào danh bạ, ghi vào bộ nhớ ngoài ...)
- Bình thường (Quyền bình thường được Android tự động phê duyệt trong khi quyền nguy hiểm cần được người dùng Android chấp thuận.)
Đây là chiến lược để có được các quyền nguy hiểm trong Android 6.0
- Kiểm tra nếu bạn có sự cho phép
- Nếu ứng dụng của bạn đã được cấp quyền, hãy tiếp tục và thực hiện bình thường.
- Nếu ứng dụng của bạn chưa có sự cho phép, hãy yêu cầu người dùng phê duyệt
- Nghe sự chấp thuận của người dùng trong
onRequestPermissionsResult
Đây là trường hợp của tôi: Tôi cần ghi vào bộ nhớ ngoài.
Đầu tiên, tôi kiểm tra xem tôi có được phép không:
...
private static final int REQUEST_WRITE_STORAGE = 112;
...
boolean hasPermission = (ContextCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
if (!hasPermission) {
ActivityCompat.requestPermissions(parentActivity,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_WRITE_STORAGE);
}
Sau đó kiểm tra sự chấp thuận của người dùng:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
case REQUEST_WRITE_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
//reload my activity with permission granted or use the features what required the permission
} else
{
Toast.makeText(parentActivity, "The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show();
}
}
}
}