android,target SDK 23,运行时权限在不应该返回时返回true

时间:2015-12-11 15:08:55

标签: android google-maps sdk permissions

我在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,但似乎我犯了一些错误。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

试试这个;

public class MyClient2 : MyClient
{
    public override void Dispose()
    {
        // add your dispose information
        base.Dispose(true);
    }
}

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