ฉันประสบปัญหาเดียวกัน การอนุญาตมีสองประเภทใน Android:
- อันตราย (เข้าถึงผู้ติดต่อเขียนไปยังที่จัดเก็บข้อมูลภายนอก ... )
- ปกติ (สิทธิ์ปกติได้รับการอนุมัติโดย Android โดยอัตโนมัติในขณะที่สิทธิ์ที่เป็นอันตรายจะต้องได้รับการอนุมัติจากผู้ใช้ Android)
นี่คือกลยุทธ์ในการรับการอนุญาตที่เป็นอันตรายใน Android 6.0
- ตรวจสอบว่าคุณได้รับอนุญาต
- หากแอปของคุณได้รับอนุญาตแล้วให้ดำเนินการตามปกติ
- หากแอปของคุณยังไม่ได้รับอนุญาตให้ขอให้ผู้ใช้อนุมัติ
- ฟังการอนุมัติของผู้ใช้ใน
onRequestPermissionsResult
นี่คือกรณีของฉัน: ฉันต้องเขียนไปยังที่จัดเก็บข้อมูลภายนอก
ก่อนอื่นฉันจะตรวจสอบว่าฉันได้รับอนุญาตหรือไม่:
...
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);
}
จากนั้นตรวจสอบการอนุมัติของผู้ใช้:
@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();
}
}
}
}