Могу ли я использовать checkPermission вместо checkSelfPermission на android +24? - PullRequest
0 голосов
/ 20 февраля 2019

Согласно этому документу ,

, чтобы проверить, есть ли у вас разрешение, вызовите ContextCompat.checkSelfPermission ()

И этот документ гласит:

[Context] .checkPermission () предназначен для определения того, разрешено ли данное разрешение для определенного процесса и идентификатора пользователя, работающего в системе

У меня есть следующий код на Android 24:

smsPerm = "android.permission.SEND_SMS";
int result = checkPermission(smsPerm, Process.myPid(), Process.myUid());

result будет:

  • PackageManager.PERMISSION_GRANTED, если smsPerm добавлено в манифест ипредоставляется во время выполнения.
  • PackageManager.PERMISSION_DENIED, если smsPerm добавляется в манифест, но не предоставляется во время выполнения.
  • PackageManager.PERMISSION_DENIED, если smsPerm не добавляется в манифест.

С этим высказыванием кажется, что поведение такое же, как checkSelfPermission на андроиде +24.Могу ли я использовать checkPermission вместо checkSelfPermission?

1 Ответ

0 голосов
/ 24 февраля 2019

Я не уверен, что вы думаете, что вы получаете ... но, да, вы можете использовать Context#checkPermission() вместо ContextCompat.checkSelfPermission().

Реализация ContextCompat.checkSelfPermission() использует Context#checkPermission(), по крайней мере на момент публикации этого ответа .

public static int checkSelfPermission(@NonNull Context context, @NonNull String permission) {
    if (permission == null) {
        throw new IllegalArgumentException("permission is null");
    }

    return context.checkPermission(permission, android.os.Process.myPid(), Process.myUid());
}

В долгосрочной перспективе было бы безопаснее использовать ContextCompat.checkSelfPermission().Это можно обновить, чтобы отразить новые правила, применяемые в новых версиях Android.

...