Я настраиваю свою карту для отслеживания моего местоположения. С самого начала я хочу, чтобы он обнаружил мой Lat и Long и показал, где я, и обновляю местоположение маркера, когда я двигаюсь.Текущее местоположение отображается на эмуляторе, но не на телефоне
Когда я тестирую это на эмуляторе GenyMotion и вводю свои собственные позиции, он работает и показывает обновленное местоположение соответственно. Но когда я тестирую его на мобильном устройстве, я не получаю никакого маркера и получаю сообщение «Точка с нулевой точкой».
Поскольку это первый раз на устройстве, вероятно, нет последнего известного местоположения. Таким образом, желая убедиться, я взял устройство и сдвинул дистанцию (вероятно, на 50 метров назад) и до сих пор ничего не обновляется на устройстве.
public class TrackMapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener {
private GoogleMap mMap;
LocationManager locationManager;
Location location;
String provider;
Double lat, lng;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_track_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);
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
provider = locationManager.getBestProvider(new Criteria(), false);
try {
//Get last known user location
location = locationManager.getLastKnownLocation(provider);
if(location != null){
Toast.makeText(TrackMapsActivity.this, "Location NOT null", Toast.LENGTH_SHORT).show();
onLocationChanged(location);
}
else {
Toast.makeText(TrackMapsActivity.this, "Location null", Toast.LENGTH_SHORT).show();
}
}
catch (SecurityException e){
e.printStackTrace();
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}
@Override
protected void onResume() {
super.onResume();
try {
locationManager.requestLocationUpdates(provider, 400, 1, this);
}
catch (SecurityException e){
e.printStackTrace();
}
}
@Override
protected void onPause() {
super.onPause();
try {
locationManager.removeUpdates(this);
}
catch (SecurityException e){
e.printStackTrace();
}
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onLocationChanged(Location location) {
Toast.makeText(TrackMapsActivity.this, "You Moved", Toast.LENGTH_SHORT).show();
lat = location.getLatitude();
lng = location.getLongitude();
LatLng yourLocation = new LatLng(lat, lng);
if(mMap != null) {
mMap.clear();
mMap.addMarker(new MarkerOptions().position(yourLocation).title("Your Location"));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(yourLocation, 10));
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
Пробовал ли вы перемещать свой телефон во время работы приложения, чтобы проверить, работает ли обратный вызов LocationChanged? – stanfordude
@stanfordude Да никаких изменений. Я также не получаю сообщение «You Moved» «Toast». – JasSy
проверили, использует ли ваше устройство правильное имя пакета в «use-permission» в AndroidManifest.xml? – gerardnimo