2016-03-15 14 views
1

Я использую Android API lvl 23 в своем приложении. Когда я проверяю разрешение камеры, то ContextCompat.checkSelfPermission всегда возвращает 0 (== PackageManager.PERMISSION_GRANTED)ContextCompat.checkSelfPermission (Context, Manifest.permission.CAMERA) alway return предоставлен

мне удалось изменить его от 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; 
    } 
} 

Моя зависимость в Gradle построить

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

В чем вы заключаете "РАЗРЕШЕНИЯ"? – ianhanniballake

+0

'РАЗРЕШЕНИЯ [i]' что в нем? –

+0

добавить РАЗРЕШЕНИЯ в вопрос –

ответ

3

Вашего разрешение должно быть Manifest.permission.<Android permission> Что ваш Android целевого версия? shouldShowRequestPermissionRationale всегда возвращает false, что означает, что ContextCompat.checkSelfPermission(activity, permission) всегда возвращает false в Android API lvl под 23 тоже.

Document here. Пожалуйста, сосредоточьте внимание на:

Примечание: если пользователь отклонил запрос на разрешение в прошлом и в диалоговом окне системы запроса разрешений отключил параметр «Не спрашивать снова», этот метод возвращает значение false. Метод также возвращает false, если политика устройства запрещает приложению иметь такое разрешение.

+0

Позвольте мне проверить это! Спасибо U. –

+0

Он работает для меня, но я использовал библиотеку Linphone. Это не поддержка API lvl 23. Есть ли у вас какие-либо эксперименты по этому поводу? –

+0

Добро пожаловать! У меня нет опыта работы с Linphone Service. –

 Смежные вопросы

  • Нет связанных вопросов^_^