位置按钮无法使用GoogleMaps v2

时间:2016-02-11 19:42:11

标签: android google-maps geolocation

我正在尝试使用Google地图上的位置按钮获取当前位置,但我遇到了一些问题。使用新的运行时权限(API级别23),我不知道我是否表现良好。 使用下面的代码,当我使用虚拟设备API 23时,位置按钮不会出现,并且使用虚拟设备API 22,它会出现,但不会执行任何操作。那可能是什么问题呢?

    public class MapsActivity extends FragmentActivity implements
        OnMapReadyCallback{

private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap map) {
    mMap = map;

    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {
        mMap.setMyLocationEnabled(true);
    } else {
        // Show rationale and request permission.
    }

}

}

In the Manifest file :

<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

提前致谢..

1 个答案:

答案 0 :(得分:2)

在api level 23中,您需要以编程方式检查权限。您正在检查位置权限,如果已授予,则启用位置设置。如果未获批准,您可以申请许可。

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
        == PackageManager.PERMISSION_GRANTED) {
    mMap.setMyLocationEnabled(true);
} else {
    ActivityCompat.requestPermissions(MapActivity.this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},REQUEST_CODE);
}

然后你可以通过覆盖这个方法来处理结果。

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case REQUEST_CODE: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //do something
            } else {
                finish();
            }
            break;
        }
    }
}

您也可以从模拟器的应用程序设置中获得许可。

尝试后告诉我。祝你好运。

编辑: 您需要实现clicklistener到mylocation按钮。

final GoogleMap mMap = map; 
map.setOnMyLocationButtonClickListener(new GoogleMap.OnMyLocationButtonClickListener() {
        @Override
        public boolean onMyLocationButtonClick() {
            LatLng loc = new LatLng(mMap.getMyLocation().getLatitude(),mMap.getMyLocation().getLongitude());
            mMap.moveCamera(CameraUpdateFactory.newLatLng(loc));
            return true;
        }
    });