【问题标题】:Granting Android Permissions - unknown value授予 Android 权限 - 未知值
【发布时间】:2017-05-28 09:28:17
【问题描述】:

前段时间,我通过互联网上的一些教程为我的应用添加了关于“良好位置”的权限。一切都如我所愿,但我对 1 条无法解释的行有疑问:

private static final int MY_PERMISSION_REQUEST_FINE_LOCATION = 101; 

为什么会有值 101 ?为什么不是 102 或 200?


private static final int MY_PERMISSION_REQUEST_FINE_LOCATION = 101;

.

   public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED &&
                ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION)
                        != PackageManager.PERMISSION_GRANTED) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                        MY_PERMISSION_REQUEST_FINE_LOCATION);

            } else {

            }
            return;
        }

.

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case MY_PERMISSION_REQUEST_FINE_LOCATION:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {


                if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION)
                        != PackageManager.PERMISSION_GRANTED &&
                        ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION)
                                != PackageManager.PERMISSION_GRANTED) {

                    return;
                }
                LatLng position = new LatLng(0, 0);


            } else {

                close();
            }

    }

}

【问题讨论】:

    标签: java android permissions


    【解决方案1】:

    你可以给它你想要的值。在RequestPermissionResult上做这个工作来捕获requestCode是值得的

    【讨论】:

    • 值得一提的是,活动中的每个requestPermissions() 调用都应该得到一个不同的int 值。
    • 我在我的应用中添加了所有具有“权限”的代码,您可以查看
    • 您在 onRequestPermissionsResult 中使用 101。当您向该位置发送权限请求时,您会被该值捕获,因为您使用该值发送它。
    【解决方案2】:

    requestPermissions() 的文档中,它说requestCode 用于

    与报告给的结果相匹配的特定于应用程序的请求代码 onRequestPermissionsResult(int, String[], int[])。应该 >= 0。

    这意味着您将明确地将此代码指定为您想要的任何值,然后您可以使用此值在回调onRequestPermissionsResult 中检查您的请求是否成功。举个例子,把这段代码放在你的Activity中:

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 101:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //granted
                } else {
                    //not granted
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
    

    回到您的问题,您可以使用 102 或 200 或任何您想要的值。但是您应该始终使用在requestPermissions 方法中提供的相同代码来检查请求是否成功。

    【讨论】:

      猜你喜欢
      • 2016-06-03
      • 2016-03-08
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2020-08-22
      • 2022-08-24
      相关资源
      最近更新 更多