android - 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);
}
}
}
}
}
解决方案
调试您的代码以检查您在首次授予权限时收到的纬度和经度值。那个时候可能没有设置位置。如果 GPS 尚未打开,获取精确位置有时需要更多时间。我在一些用于测试的设备上遇到了同样的问题。
推荐阅读
- mysql - 如何在mysql-connector中使用游标以及何时关闭连接
- python - pandas:astype(float) 不将字符串转换为浮点类型
- python - Pandas 使用列名检查行列表值
- c++ - 为什么我在主程序中收到错误消息:没有构造函数实例与参数列表匹配?
- python-3.x - 来自 azure.storage.blob 的 python 方法 get_service_stats 的问题
- c# - 在 .Net Core 中记录对象或实体时,记录器会在对象图中循环
- php - 我可以使用什么 SQL 查询将另一个表中的多行与第一个表结合起来?
- windows - robocopy 使用 secfix 修复仅子目录的权限,不包括根目录
- php - 如何在php中获得实时余额
- git - git 输出为空白,除非捕获如下: echo "$(git branch)"