首页 > 解决方案 > Android 地图:我的位置按钮在活动首次启动时不起作用

问题描述

当我第一次运行我的地图活动并接受位置权限时,如果我按下“我的位置”按钮,没有任何反应。

但是,如果我关闭活动并返回它,那么按钮之后就可以正常工作了!所以,问题只有在我第一次接受活动启动的权限之后。

如果我在接受权限后重新创建活动,问题就解决了,但我不喜欢那个解决方案,而且我想了解问题的原因。

是什么导致了这个错误?

 public class MapsActivity extends FragmentActivity implements` OnMapReadyCallback {

        private GoogleMap mMap;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maps);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);

        GoogleMapOptions options = new GoogleMapOptions();
        options.mapType(GoogleMap.MAP_TYPE_NORMAL);

        mapFragment.newInstance(options);
        mapFragment.getMapAsync(this);
    }

#

public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
            requestLocationPermissions();
            mMap.getUiSettings().setMapToolbarEnabled(true);
    }

#

 public void requestLocationPermissions() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED ||
                ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED){

            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
                    15);
        }else{

            mMap.setMyLocationEnabled(true);//needs location permission
            mMap.getUiSettings().setMyLocationButtonEnabled(true);

        }
    }

    @SuppressLint("MissingPermission")
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 15) {
            if (grantResults.length == 0) {
                requestLocationPermissions();
            } else {
                if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED  ) {
                    Toast.makeText(this, "You have to accept all Permissions!", Toast.LENGTH_SHORT).show();
                    Log.e("Permission refused","Permission refused");
                    requestLocationPermissions();
                } else {
                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED ) {
                    mMap.setMyLocationEnabled(true);
                    mMap.getUiSettings().setMyLocationButtonEnabled(true);
                   }
                }
            }
        }

    }

标签: androidgoogle-mapsgoogle-maps-api-3google-maps-android-api-2android-maps-v2

解决方案


调试您的代码以检查您在首次授予权限时收到的纬度和经度值。那个时候可能没有设置位置。如果 GPS 尚未打开,获取精确位置有时需要更多时间。我在一些用于测试的设备上遇到了同样的问题。


推荐阅读