Хотя текущие ответы великолепны, ни один из них не сделал то, что я искал, я хотел открыть только приложение карт, добавить имя для каждого исходного местоположения и пункта назначения, используя схему гео-URI. работать на меня вообще, и у веб-ссылки на карты не было ярлыков, поэтому я придумала это решение, которое, по сути, объединяет другие решения и комментарии, сделанные здесь, надеюсь, это будет полезно для других, просматривающих этот вопрос.
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?saddr=%f,%f(%s)&daddr=%f,%f (%s)", sourceLatitude, sourceLongitude, "Home Sweet Home", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);
Чтобы использовать ваше текущее местоположение в качестве отправной точки (к сожалению, я не нашел способа обозначить текущее местоположение), затем используйте следующее
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);
Для полноты, если пользователь не Если у вас не установлено приложение карт, то будет хорошей идеей перехватить ActivityNotFoundException, тогда мы сможем снова начать действие без ограничений приложения карт, мы можем быть почти уверены, что в конце мы никогда не доберемся до Toast, так как Интернет-браузер также является допустимым приложением для запуска этой схемы URL.
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", 12f, 2f, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
try
{
startActivity(intent);
}
catch(ActivityNotFoundException ex)
{
try
{
Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(unrestrictedIntent);
}
catch(ActivityNotFoundException innerEx)
{
Toast.makeText(this, "Please install a maps application", Toast.LENGTH_LONG).show();
}
}
П.С. Любые широты или долготы, используемые в моем примере, не являются репрезентативными для моего местоположения, любое сходство с истинным местоположением является чистым совпадением, иначе я не из Африки: P
РЕДАКТИРОВАТЬ:
Для указаний теперь поддерживается навигация с помощью google.navigation
Uri navigationIntentUri = Uri.parse("google.navigation:q=" + 12f +"," + 2f);//creating intent with latlng
Intent mapIntent = new Intent(Intent.ACTION_VIEW, navigationIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
. Вам не требуется для присоединения к потоку, но это хорошая идея. Без вызова pthread_join () существует вероятность того, что функция main () вернется до завершения потока. В этом случае pthread_join () заставляет приложение ждать, пока другой поток не закончит обработку. Кроме того, когда вы присоединяетесь к потоку, это дает вам возможность проверить возвращаемые значения и убедиться, что все прошло гладко, и дает вам возможность очистить все ресурсы, которыми вы, возможно, поделились с потоком.
EDIT: Функция, которая может вас заинтересовать, - это pthread_detach (). pthread_detach () позволяет очистить хранилище потока после его завершения, поэтому нет необходимости присоединяться к потоку впоследствии.