Ярлык географического намерения не отображается в приложении Google Maps
Так как мое приложение Google Maps недавно обновилось, теперь версия 10.11.1, следующий код не показывает метку, как ожидалось, задокументировано и ранее работало:
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:38.8951,100.0364?q=38.8951,100.0364(foo)")).setPackage("com.google.android.apps.maps")
if (intent.resolveActivity(packageManager) == null) {
intent.setPackage(null)
}
startActivity(intent)
И эта версия тоже не работает (с 0,0
сразу после geo:
:
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=38.8951,100.0364(foo)")).setPackage("com.google.android.apps.maps")
if (intent.resolveActivity(packageManager) == null) {
intent.setPackage(null)
}
startActivity(intent)
Также пример кода в официальной документации не показывает метку:
// Display a label at the location of Google Sydney office
Uri gmmIntentUri = Uri.parse("geo:0,0?q=-33.8666,151.1957(Google+Sydney)");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Ответы
Ответ 1
Нет решения, даже с последним обновлением карты 10.12.1, ярлык все равно не отображается, даже если в документации все еще говорится, что я должен был создать проблему в системе отслеживания проблем Google: https://issuetracker.google.com/issues/129726279
надеюсь, у нас будет некоторая информация в ближайшее время.
Ответ 2
Я столкнулся с той же проблемой сегодня. Следующие примеры Google не сработали. Единственный способ, которым это работает, - это ставить lat/lng сразу после geo:
а не ставить их после ?q=
вообще.
Я делаю это так:
val gUri = Uri.parse("geo:${eventDetails.latitude},${eventDetails.longitude}?q=${Uri.encode(eventDetails.place)}")
В моем случае, place
не точный адрес, а просто название местоположения/здания. Это, однако, может создать некоторые проблемы. Вместо того, чтобы размещать маркер на ваших координатах с указанным вами ярлыком, поиск в Картах Google смещает результаты в указанную область И может возвращать более одного результата.
Например, если я укажу любой лат/лнг и "Оксфордский университет" как место, Google Maps доставит меня в район Оксфордского университета и поместит дюжину маркеров вокруг него, указывая на некоторые колледжи и т.д.
Предоставление адреса вместо названия места решает проблему с несколькими маркерами, так как Карты Google поместят один из них в нужное место с вашим адресом на этикетке и предоставят вам карточки с нижними листами с предложениями о том, что там. Это, однако, не является решением самой проблемы невозможности поставить маркер с вашей меткой на ваших координатах.
Вопрос в том, является ли это ошибкой, плохо документированной или способом помешать людям размещать на карте фальшивые/ненастоящие ярлыки.
Ответ 3
Вы могли бы заменить свой код этим, и если любой из них работает для вас:
Uri gmmIntentUri = Uri.parse("geo:-33.8666,151.1957?q=Google+Sydney");
или же
Uri gmmIntentUri = Uri.parse("geo:-33.8666,151.1957?q=" + Uri.encode("Google,Sydney"));
или же
Uri gmmIntentUri = Uri.parse("geo:0,0?q=-33.8666,151.1957 (Google+Sydney)");
Ответ 4
val gUri = Uri.parse("geo:${eventDetails.latitude},${eventDetails.longitude}?q=${Uri.encode(eventDetails.place)}")