Android运行时权限 - 如何实现

And*_*orr 19 java permissions android android-6.0-marshmallow

Android Developer Documentation提供了在运行时请求权限的示例:

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
            Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an expanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}
Run Code Online (Sandbox Code Playgroud)

这个例子中的"MY_PERMISSIONS_REQUEST_READ_CONTACTS"是什么?它说这是一个app定义的int常量,但这是否意味着我应该创建一个Constants.java并声明一个公共的静态int?价值应该是什么?

在其他示例中,我看到人们在这里使用1,或0或0xFFEEDDCC,但我无法找到它的解释.有人可以向我解释需要去哪里以及为什么?(在我的情况下,我需要确保应用程序有权访问正常位置)

ActivityCompat文档说"应用程序特定的请求代码与报告给onRequestPermissionsResult的结果相匹配"?这对我没有帮助.

Com*_*are 21

这个例子中的"MY_PERMISSIONS_REQUEST_READ_CONTACTS"是什么?

int将特定requestPermissions()调用绑定到相应的onRequestPermissionsResult()回调是一种方法.

在封面下,requestPermissions()用途startActivityForResult(); 这int与它的作用相同startActivityForResult().

这是否意味着我应该创建一个Constants.java并声明一个公共静态int?

我只想private static final int在活动中做到这一点.但是,您可以在任何地方声明它.

价值应该是什么?

我似乎记得它需要低于0x8000000,否则它可以是你想要的任何东西.您requestPermissions()在活动中为每个调用使用的值应该是不同的int,但实际数字无关紧要.

如果您的活动只有一个requestPermissions()电话,则该int值无关紧要.但是许多应用程序会requestPermissions()在一项活动中进行多次调用.在这种情况下,开发人员可能需要知道onRequestPermissionsResult()这是什么请求.