为什么我不能在我的代码上删除'checkSelfPermission'?

时间:2015-10-18 04:03:21

标签: android

我编写了简单的代码来返回设备的gpsLocation。 当我编译它时,我得到一个错误,我没有使用访问GPS和网络的'checkSelfPermission'。

当我进入'checkSelfPermission'代码时,我得到一个例外。

  1. 我怎样才能避免使用checkSelfPermission方法?
  2. 为什么我得到例外?

     @TargetApi(Build.VERSION_CODES.M)
      private void getLocation() {
        try {
              locationManager = (LocationManager)mContext.getSystemService(LOCATION_SERVICE);
    
        // getting GPS status
        isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    
        // getting network status
        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    
        if (isNetworkEnabled)
        {
            **// the exception is on the 'checkSelfPermission'** 
                if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    
                    return;
                }
    
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
                    MIN_TIME_BW_UPDATES,
                    MIN_DISTANCE_CHANGE_FOR_UPDATES,
                    this);
    
            if (locationManager != null)
            {
    
                location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if (location != null) {
                    latitude = location.getLatitude();
                    longitude = location.getLongitude();
                }
            }
        }
    
        if (isGPSEnabled)
        {
            if (location == null)
            {
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES,
                        this);
    
                if (locationManager != null)
                {
                    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    
                    if (location != null)
                    {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                    }
                }
            }
        }
    }
    catch(Exception e)
    {
        Log.e("Error", e.getMessage());
    }
    

    }

1 个答案:

答案 0 :(得分:2)

直接来自android文档:

  

从Android 6.0(API级别23)开始,用户授予权限   应用程序运行时的应用程序,而非安装应用程序时的应用程序。

     

系统权限分为两类,普通和   危险:

     

1.Normal权限不会直接影响用户的隐私。如果你的   应用程序列出其清单中的正常权限,系统授予   自动许可。

     

2.Dangerous权限可以给应用程序   访问用户的机密数据。

如果您的应用需要危险权限,则每次执行需要该权限的操作时,都必须检查是否拥有该权限。访问设备位置需要危险的权限,因此您必须在运行时检查并请求位置权限。

要检查您的应用是否已获得授权,您可以使用:

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.WRITE_CALENDAR);

如果应用具有权限,则该方法返回PackageManager.PERMISSION_GRANTED,应用可以继续操作。如果应用程序没有权限,则该方法返回PERMISSION_DENIED,应用程序必须明确要求用户许可。

所以你无法避免checkSelfPermission