2016-03-15 155 views
1

我在我的應用程序中使用Android API lvl 23。當我檢查攝像頭權限時,ContextCompat.checkSelfPermission總是返回0(== PackageManager.PERMISSION_GRANTEDContextCompat.checkSelfPermission(Context,Manifest.permission.CAMERA)總是返回

我設法將其從ContextCompat更改爲ActivityCompat

這裏是我的代碼:

public static boolean verify(Activity activity, final String[] PERMISSIONS, final int PERMISSIONS_REQUEST_ID) { 
    if (underAPI23()) 
     return true; 

    String[] denyPermission = new String[PERMISSIONS.length]; 
    int denyPermissionLength = 0; 
    boolean shouldShowRequest = false; 

    for (int i = 0; i < PERMISSIONS.length; i++) { 
     int check = ContextCompat.checkSelfPermission(activity, PERMISSIONS[i]); 
     LogUtils.e(TAG, PERMISSIONS[i] + ": " + (check != PackageManager.PERMISSION_GRANTED)); 
     // ===== ===== ===== 
     // This always return true. :'(
     // ===== ===== ===== 
     if (check != PackageManager.PERMISSION_GRANTED) { 
      denyPermission[denyPermissionLength++] = PERMISSIONS[i]; 
      if (shouldShowRequest == false) { 
       boolean should = ActivityCompat.shouldShowRequestPermissionRationale(activity, PERMISSIONS[i]); 
       if (should) 
        shouldShowRequest = true; 
      } 
     } 
    } 

    if (denyPermissionLength > 0) { 
     if (shouldShowRequest) { 
      ActivityCompat.requestPermissions(activity, denyPermission, PERMISSIONS_REQUEST_ID); 
     } else { 
      ActivityCompat.requestPermissions(activity, denyPermission, PERMISSIONS_REQUEST_ID); 
     } 
     return false; 
    } else { 
     return true; 
    } 
} 

我在搖籃依賴建立

dependencies { 
    //... 
    compile 'com.android.support:support-v4:23.2.0' 
    compile 'com.android.support:appcompat-v7:23.2.0' 
    //... 
} 

更新時間:權限調用

if (PermissionGrant.verify(getActivity(), new String[]{Manifest.permission.CAMERA}, GRANT_TAKE_PHOTO)) { 
    // Do my jobs 
} 
+0

你通過'PERMISSIONS'傳遞了什麼? – ianhanniballake

+0

'權限[我]'它有什麼? –

+0

添加有關的權限 –

回答

3

你的權限應該是Manifest.permission.<Android permission> 什麼是你的Android目標版? shouldShowRequestPermissionRationale總是返回false那意味着ContextCompat.checkSelfPermission(activity, permission)在Android API lvl下也總是返回false。

Document here。請關注:

注意:如果用戶拒絕了過去的權限請求,並且在權限請求系統對話框中選擇了「不要再請求」選項,則此方法返回false。如果設備策略禁止應用程序擁有該權限,該方法也會返回false。

+0

讓我檢查一下!感謝U. –

+0

它爲我工作,但我使用Linphone圖書館。它不支持API lvl 23.你有什麼經驗嗎? –

+0

不客氣!我沒有關於Linphone服務的任何經驗。 –