【问题标题】:android, target SDK 23, permissions at runtime returns true when it shouldn'tandroid,目标 SDK 23,运行时的权限在不应该返回 true 时
【发布时间】:2015-12-11 15:08:55
【问题描述】:

我在 Android 运行时检查权限时遇到了一些问题,其中目标 SDK 为 23。这是我主要活动中的一些代码。

       public void GoToLocation(){
                if(ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION)
                        != PackageManager.PERMISSION_GRANTED) {

                    ActivityCompat.requestPermissions(this,new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                            MY_PERMISSIONS_REQUEST_FINE_LOCATION);
                }
                else {
                    locationManager= (LocationManager)getSystemService(Context.LOCATION_SERVICE);
                    Location locator = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    LatLng position = new LatLng(locator.getLatitude(), locator.getLongitude());

                    Marker m = myMap.addMarker(new MarkerOptions().position(position));
                    mapsMarkers.add(m);

                    myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(position, 6));
                }
            }

问题是:这个方法是通过用户在地图上的点击来调用的。我不知道为什么,但首先if 返回false(这意味着尽管没有授予权限!)。所以它转到else 子句并引发空引用异常,导致定位器获取null(因为我从未授予这些权限,requestMethod() 没有机会被调用)。

我关注了this,但似乎我犯了一些错误。 任何帮助将不胜感激。

【问题讨论】:

  • 你在哪里测试你的代码?在任何棉花糖装置中?请从设置中检查应用程序的授予权限。如果授予权限,则关闭权限并再次测试应用程序。

标签: android google-maps sdk permissions


【解决方案1】:

试试这个;

  public void GoToLocation(){
            if(ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED) {

                ActivityCompat.requestPermissions(this,new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                        MY_PERMISSIONS_REQUEST_FINE_LOCATION);
            }
            else {
                locationManager= (LocationManager)getSystemService(Context.LOCATION_SERVICE);
                Location locator = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                LatLng position = new LatLng(locator.getLatitude(), locator.getLongitude());

                Marker m = myMap.addMarker(new MarkerOptions().position(position));
                mapsMarkers.add(m);

                myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(position, 6));
            }
        }

确保你在运行 marshmallow 或更高版本的设备中测试这个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    相关资源
    最近更新 更多