我试图获取设备位置,但 TomtomMap.getUsersLocation() 始终返回 null。
连线的事情是,因为我设置了 TomtomMap.setMyLocationEnabled(true),所以地图正确地标记了用户位置,但是当我尝试为自己获取它时,它返回 null。
我按照有关如何操作的文档进行操作,操作非常简单,但它不起作用。我还检查了下面的答案,但这只是文档的副本。
我试图获取设备位置,但 TomtomMap.getUsersLocation() 始终返回 null。
连线的事情是,因为我设置了 TomtomMap.setMyLocationEnabled(true),所以地图正确地标记了用户位置,但是当我尝试为自己获取它时,它返回 null。
我按照有关如何操作的文档进行操作,操作非常简单,但它不起作用。我还检查了下面的答案,但这只是文档的副本。
onMapReady
不看代码很难猜到,但很可能在 GPS 位置尚不可用时(可能在回调内部),您正试图过早获取用户位置。
为了确保您尽快获得用户位置,您可以覆盖onLocationChanged
回调。
请在下面找到示例活动代码:
public class MainActivity extends AppCompatActivity implements LocationUpdateListener, OnMapReadyCallback {
private TomtomMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Register onMapReady callback
MapFragment mapFragment = (MapFragment) getSupportFragmentManager().findFragmentById(R.id.map_fragment);
mapFragment.getAsyncMap(this);
}
@Override
public void onMapReady(@NonNull TomtomMap tomtomMap) {
this.map = tomtomMap;
// Enable location and register location listener callback
this.map.setMyLocationEnabled(true);
this.map.addLocationUpdateListener(this);
}
// Forward permissions callbacks
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
this.map.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
public void onLocationChanged(Location location) {
// Use map.getUserLocation() without getting NULL
Toast.makeText(this, this.map.getUserLocation().toString(), Toast.LENGTH_SHORT).show();
// Remove location listener if needed
this.map.removeLocationUpdateListener(this);
}
}