2015-12-31 3 views
0

Я настраиваю свою карту для отслеживания моего местоположения. С самого начала я хочу, чтобы он обнаружил мой 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) { 

    } 
} 
+0

Пробовал ли вы перемещать свой телефон во время работы приложения, чтобы проверить, работает ли обратный вызов LocationChanged? – stanfordude

+0

@stanfordude Да никаких изменений. Я также не получаю сообщение «You Moved» «Toast». – JasSy

+0

проверили, использует ли ваше устройство правильное имя пакета в «use-permission» в AndroidManifest.xml? – gerardnimo

ответ

0

вы поставить разрешение на использование GPS :) Основные права, которые вам нужны

android.permission.ACCESS_COARSE_LOCATION или
android.permission.ACCESS_FINE_LOCATION.

+0

Да, у меня есть права на мой манифест – JasSy

Смежные вопросы