我可以在Android +24上使用checkPermission而不是checkSelfPermission吗?

时间:2019-02-20 13:31:23

标签: android permissions android-manifest android-6.0-marshmallow runtime-permissions

根据this document

  

要检查您是否有权限,请致电   ContextCompat.checkSelfPermission()

this document说:

  

[Context] .checkPermission()是确定给定的   允许特定的进程和用户ID在其中运行   系统

我在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添加到清单中。

这句话看来,其行为与android +24上的checkSelfPermission相同。我可以使用checkPermission代替checkSelfPermission吗?

1 个答案:

答案 0 :(得分:1)

我不确定您认为自己会获得什么...但是,是的,您可以使用Context#checkPermission()代替ContextCompat.checkSelfPermission()

ContextCompat.checkSelfPermission()的实现使用Context#checkPermission(),至少使用at the time that I posted this answer

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的新规则。