Android, как передать информацию о длинном маршруте в приложение Google Maps
У меня есть приложение для Android, которое показывает несколько мест на карте. Когда я нажимаю на местоположение, я хотел бы передать его длину и длину устройства в приложение Google Maps, чтобы оно могло показать мне информацию о маршруте между ними.
Это возможно? Если так, как? Благодарю.
4 ответа
Да, вы можете передать широту и долготу на Карты и показать направление к этому Месту, используя Намерение Android.
Направления всегда даны от текущего местоположения пользователей.
Следующий запрос поможет вам выполнить это. Вы можете передать широту и долготу пункта назначения здесь:
google.navigation:q=latitude,longitude
Используйте выше как:
Uri gmmIntentUri = Uri.parse("google.navigation:q=latitude,longitude");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Дополнительная информация здесь: https://developers.google.com/maps/documentation/urls/android-intents
Начиная с 2017 года, рекомендуемый методом Google URL-адреса Карт Google:
https://developers.google.com/maps/documentation/urls/guide
Вы можете создать кроссплатформенный универсальный URL-адрес для указаний Google, следуя документации, и использовать его в своих целях. Например, URL может быть что-то вроде
https://www.google.com/maps/dir/?api=1&destination=60.626200,16.776800&travelmode=driving
googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener()
{
@Override
public void onMapClick(LatLng latLng)
{
String url = "https://www.google.com/maps/dir/?api=1&destination=" + latLng.latitude + "," + latLng.longitude + "&travelmode=driving";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}
});
Надеюсь это поможет!
Вы можете попробовать это:
googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener()
{
@Override
public void onMapClick(LatLng latLng)
{
String url = "http://maps.google.com/maps?daddr=" + latLng.latitude + "," + latLng.longitude;
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}
});
Добавить компиляцию зависимостей 'com.google.android.gms:play-services-maps:11.0.4'
добавить в файл манифеста
<permission
android:name="com.example.com.locationmap.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> and meta data
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyCHrUMMMFTLannfAaqQ9RGVaTu301Ee0j8" />
код для xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>
</RelativeLayout>
код для Java-класса
public class MapActivity extends FragmentActivity implements
OnMapReadyCallback,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private GoogleMap mMap;
double latitude = 0;
double longitude = 0;
double latitude2 = 0;
double longitude2 = 0;
LatLng position;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
latitude = getIntent().getDoubleExtra("lat", 0);
longitude = getIntent().getDoubleExtra("long", 0);
// Getting Reference to SupportMapFragment of activity_map.xml
SupportMapFragment fm = (SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map);
fm.getMapAsync(MapActivity.this);
}
@Override
public void onConnected(Bundle bundle) {
/* getDirection();*/
/*getCurrentLocation();*/
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
@Override
public void onMapReady(GoogleMap googleMap) {
// Receiving latitude from MainActivity screen
latitude = getIntent().getDoubleExtra("lat", 0);
// Receiving longitude from MainActivity screen
longitude = getIntent().getDoubleExtra("long", 0);
latitude2 = 73.998;
// Receiving longitude from MainActivity screen
longitude2 = 22.4567;
position = new LatLng(latitude, longitude);
// Instantiating MarkerOptions class
MarkerOptions options = new MarkerOptions();
// Setting position for the MarkerOptions
options.position(position);
// Setting title for the MarkerOptions
options.title("Location");
// Setting snippet for the MarkerOptions
// Adding Marker on the Google Map
try {
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(latitude,
longitude, 1);
String cityName = addresses.get(0).getAddressLine(0);
String stateName = addresses.get(0).getAddressLine(1);
String countryName = addresses.get(0).getAddressLine(2);
options.snippet(cityName + "," + stateName);
} catch (Exception ex) {
ex.getMessage();
options.snippet("Latitude:" + latitude + ",Longitude:" + longitude);
}
googleMap.addMarker(options);
googleMap.addMarker(options.position(new LatLng(latitude2,
longitude2)));
// Creating CameraUpdate object for position
CameraUpdate updatePosition = CameraUpdateFactory.newLatLng(position);
// Creating CameraUpdate object for zoom
CameraUpdate updateZoom = CameraUpdateFactory.zoomTo(6);
// Updating the camera position to the user input latitude and longitude
googleMap.moveCamera(updatePosition);
// Applying zoom to the marker position
googleMap.animateCamera(updateZoom);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
/*
getMenuInflater().inflate(R.menu.main, menu);
*/
return true;
}
}
`