Android: Проложить маршрут из Google Map - PullRequest
0 голосов
/ 23 ноября 2011

Я пытаюсь дать направление пользователю, используя карту Google из одного местоположения в другое. Я использую код ниже, но я понятия не имею, почему он не работает. Я не могу понять проблему, все кажется правильным.

final double latitude = 37.894404;
final double longitude = -122.0660386;

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                Criteria criteria = new Criteria();
                criteria.setAccuracy(Criteria.ACCURACY_FINE);
                criteria.setAltitudeRequired(false);
                Location lastKnownLocation = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, true));

                if(lastKnownLocation != null){

                    double lat = lastKnownLocation.getLatitude();
                    double longi = lastKnownLocation.getLongitude();

                    Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr="+lat+","+longi+"&daddr="+latitude+","+longitude));

                    startActivity(intent);

                }else{

                    Toast.makeText(contactus.this,"Coudn't get provider", Toast.LENGTH_SHORT).show();
                }           
            }

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Я на самом деле заставил это работать, и вот код, который я использовал,

final double latitude = 45.894404;
final double longitude = -112.0660386;

LocationManager lManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Criteria crit = new Criteria();
String towers = lManager.getBestProvider(crit, false);
Location userCurrentLocation = lManager.getLastKnownLocation(towers);

if(userCurrentLocation != null){

     double lat = userCurrentLocation.getLatitude();
     double longi = userCurrentLocation.getLongitude();

     Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr="+lat+","+longi+"&daddr="+latitude+","+longitude));
     startActivity(intent);

}else{

    Toast.makeText(contactus.this, "Couldn't locate a provider to find your location", Toast.LENGTH_LONG).show();
}

Не забудьте добавить разрешение, чтобы найти местоположение пользователя для вашего манифеста, включите его выше,

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
0 голосов
/ 23 ноября 2011

Прежде всего, вам нужно обернуть ваш вызов в LocationManager блоком try / catch и захватить любое исключение, которое вы получаете от вызова. Посмотрите ниже. Это сделает вызов и поймает исключение. Идите оттуда, как только узнаете, почему он возвращается NULL. По любой причине у вас всегда будут проблемы с получением географических точек местоположения с помощью эмулятора. Кроме того, Google не всегда возвращает гео-точки, поэтому в эмуляторе я зациклился, пока не вернулся. Не очень хорошая идея

    try{
                 Location lastKnownLocation = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, true));
                }
                catch(IOException e) {
                 Log.e("IOException", e.getMessage());

                 //Toaster on high-----------------//
                 Context context = getApplicationContext();
                 CharSequence text = "IOException:  " + e.getMessage();
                 int dur = Toast.LENGTH_LONG;
                    Toast.makeText(context, text, dur).show();
...