我在Android M使用Android應用程序,需要一些權限,允許訪問CAMERA
,RECORD_AUDIO
,WRITE_EXTERNAL_STORAGE
,...所以我把我的權限檢查時,用戶第一次打開應用程序。但是如果用戶拒絕它,我怎麼能自動檢測到該用戶正在使用需要權限的功能,然後再次詢問他們?或者我必須將自己的條件放在需要許可的每個功能中。自動檢測顯示允許用戶拒絕後第一次詢問
我知道當我們使用一些需要權限的功能但不允許時,它會拋出異常,所以我們有任何類來處理這個任務嗎?
我在Android M使用Android應用程序,需要一些權限,允許訪問CAMERA
,RECORD_AUDIO
,WRITE_EXTERNAL_STORAGE
,...所以我把我的權限檢查時,用戶第一次打開應用程序。但是如果用戶拒絕它,我怎麼能自動檢測到該用戶正在使用需要權限的功能,然後再次詢問他們?或者我必須將自己的條件放在需要許可的每個功能中。自動檢測顯示允許用戶拒絕後第一次詢問
我知道當我們使用一些需要權限的功能但不允許時,它會拋出異常,所以我們有任何類來處理這個任務嗎?
onRequestPermissionsResult您可以檢查特定的被授權與否,你可以調用權限,再從那裏對話框如果不授予爲例
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == REQUEST_CAMERA) {
// BEGIN_INCLUDE(permission_result)
// Received permission result for camera permission.
Log.i(TAG, "Received response for Camera permission request.");
// Check if the only required permission has been granted
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Camera permission has been granted, preview can be displayed
Log.i(TAG, "CAMERA permission has now been granted. Showing preview.");
Snackbar.make(mLayout, R.string.permision_available_camera,
Snackbar.LENGTH_SHORT).show();
} else {
Log.i(TAG, "CAMERA permission was NOT granted.");
// Ask again for permission
}
// END_INCLUDE(permission_result)
} else if (requestCode == REQUEST_CONTACTS) {
Log.i(TAG, "Received response for contact permissions request.");
// We have requested multiple permissions for contacts, so all of them need to be
// checked.
if (PermissionUtil.verifyPermissions(grantResults)) {
// All required permissions have been granted, display contacts fragment.
Snackbar.make(mLayout, R.string.permision_available_contacts,
Snackbar.LENGTH_SHORT)
.show();
} else {
Log.i(TAG, "Contacts permissions were NOT granted.");
// Ask again for permission
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
所以,如果我們沒有任何自動運行的類,當用戶使用需要許可的功能時,對嗎? –
如果你有這樣的類需要那些權限,然後從onRequestPermissions初始化這個類在格蘭特 –
例如,你有一個服務,你用這個聯繫人閱讀,然後開始服務代碼寫入裏面if(grantResults.length == 1 && grantResults [0] == PackageManager.PERMISSION_GRANTED){ } –
特別許可,我用這樣的邏輯:每次活動延伸BaseActivity,其中有是每次調用onCreate()時檢查權限的方法。
我用的方法是:
public static boolean hasPermissions(Context context, String... permissions) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
所以,每次用戶啓動一個新的活動,該應用程序檢查哪些權限尚未授予的權限和顯示。
要管理的結果,使用onRequestPermissionsResult()
順便說一句,這個邏輯會詢問用戶的權限,即使該活動的功能不需要任何許可。
如果你想要求用戶只有在那裏的權限,需要一個許可的功能,你必須在每個活動檢查
檢查是否批准入境訪問攝像機,錄音等 –
覆蓋此onRequestPermissionsResult(前)。 –
因此,如果我們在用戶使用需要許可的功能時沒有任何自動運行的類,對嗎? –