2016-10-21 25 views
1

我在Android M使用Android應用程序,需要一些權限,允許訪問CAMERA,RECORD_AUDIO,WRITE_EXTERNAL_STORAGE,...所以我把我的權限檢查時,用戶第一次打開應用程序。但是如果用戶拒絕它,我怎麼能自動檢測到該用戶正在使用需要權限的功能,然後再次詢問他們?或者我必須將自己的條件放在需要許可的每個功能中。自動檢測顯示允許用戶拒絕後第一次詢問

我知道當我們使用一些需要權限的功能但不允許時,它會拋出異常,所以我們有任何類來處理這個任務嗎?

+0

檢查是否批准入境訪問攝像機,錄音等 –

+0

覆蓋此onRequestPermissionsResult(前)。 –

+0

因此,如果我們在用戶使用需要許可的功能時沒有任何自動運行的類,對嗎? –

回答

0

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); 
    } 
} 
+0

所以,如果我們沒有任何自動運行的類,當用戶使用需要許可的功能時,對嗎? –

+0

如果你有這樣的類需要那些權限,然後從onRequestPermissions初始化這個類在格蘭特 –

+0

例如,你有一個服務,你用這個聯繫人閱讀,然後開始服務代碼寫入裏面if(grantResults.length == 1 && grantResults [0] == PackageManager.PERMISSION_GRANTED){ } –

1

特別許可,我用這樣的邏輯:每次活動延伸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()

順便說一句,這個邏輯會詢問用戶的權限,即使該活動的功能不需要任何許可。

如果你想要求用戶只有在那裏的權限,需要一個許可的功能,你必須在每個活動檢查

相關問題