내 앱에 A에서 B까지의 Google지도 길 찾기를 표시해야하지만 Google지도를 내 애플리케이션에 넣고 싶지 않습니다. 대신 인 텐트를 사용하여 시작하고 싶습니다. 이것이 가능한가? 그렇다면 어떻게?
답변
다음과 같은 것을 사용할 수 있습니다.
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("http://maps.google.com/maps?saddr=20.344,34.34&daddr=20.5666,45.345"));
startActivity(intent);
현재 위치에서 탐색을 시작하려면 saddr
매개 변수와 값을 제거하십시오 .
위도와 경도 대신 실제 거리 주소를 사용할 수 있습니다. 그러나 이렇게하면 브라우저 나 Google지도를 통한 대화 중에서 선택할 수있는 대화 상자가 나타납니다.
탐색 모드에서 Google지도가 바로 실행됩니다.
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
최신 정보
2017 년 5 월 Google은 범용 크로스 플랫폼 Google지도 URL을위한 새로운 API를 출시했습니다.
https://developers.google.com/maps/documentation/urls/guide
새로운 API에서도 인 텐트를 사용할 수 있습니다.
답변
이것은 “길 찾기”를 요청했기 때문에 약간의 주제가 아니지만 Android 설명서에 설명 된 Geo URI 체계를 사용할 수도 있습니다.
http://developer.android.com/guide/appendix/g-app-intents.html
“geo : latitude, longitude”를 사용할 때의 문제는 Google지도가 핀이나 레이블없이 특정 지점에만 중심을두고 있다는 것입니다.
특히 정확한 장소를 가리 키거나 지시를해야하는 경우에는 매우 혼란 스러울 수 있습니다.
지오 포인트에 레이블을 지정하기 위해 “geo : lat, lon? q = name”쿼리 매개 변수를 사용하는 경우 검색을 위해 쿼리를 사용하고 lat / lon 매개 변수를 닫습니다.
위도 / 경도를 사용하여지도를 중앙에 배치하고 사용자 정의 레이블이있는 핀을 표시하는 방법을 찾았으며 방향이나 다른 조치를 요청할 때 매우 유용하고 표시됩니다.
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);
참고 (@TheNail 작성) : Maps v.7 (작성시 최신 버전)에서는 작동하지 않습니다. 좌표를 무시하고 괄호 사이에 주어진 이름을 가진 객체를 검색합니다. 위치가있는 Google Maps 7.0.0 의도 도 참조하십시오.
답변
현재 답변은 훌륭하지만 그중 어느 것도 내가 찾고있는 것을 전혀하지 않았지만 geos 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을 잡는 것이 좋습니다. 그러면지도 앱 제한없이 활동을 다시 시작할 수 있습니다. 인터넷 브라우저가이 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);
답변
최신 크로스 플랫폼 Google지도 URL 사용 : Google지도 앱이 없어도 브라우저에서 열립니다
예 https://www.google.com/maps/dir/?api=1&origin=81.23444,67.0000&destination=80.252059,13.060604
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
.authority("www.google.com")
.appendPath("maps")
.appendPath("dir")
.appendPath("")
.appendQueryParameter("api", "1")
.appendQueryParameter("destination", 80.00023 + "," + 13.0783);
String url = builder.build().toString();
Log.d("Directions", url);
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
답변
다른 모드의 의도를 사용하여 Google지도를 엽니 다.
의도를 사용하여 Google지도 앱을 열 수 있습니다.
val gmmIntentUri = Uri.parse("google.navigation:q="+destintationLatitude+","+destintationLongitude + "&mode=b")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
여기서 “mode = b”는 자전거입니다.
다음을 사용하여 운전, 걷기 및 자전거 모드를 설정할 수 있습니다.
- 운전을위한 d
- 걷기위한 w
- 자전거를 타기위한 b
Google지도의 의도에 대한 자세한 내용은 여기를 참조하십시오 .
참고 : 자전거 / 차량 / 도보 경로가없는 경우 “길을 찾을 수 없습니다”라는 메시지가 표시됩니다.
내 원래 답변을 여기에서 확인할 수 있습니다 .
답변
글쎄, 당신은 Intent.setClassName
방법 을 사용하여 내장 응용 프로그램 안드로이드지도를 열려고 시도 할 수 있습니다 .
Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("geo:37.827500,-122.481670"));
i.setClassName("com.google.android.apps.maps",
"com.google.android.maps.MapsActivity");
startActivity(i);
답변
다중 웨이 포인트의 경우 다음도 사용할 수 있습니다.
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("https://www.google.com/maps/dir/48.8276261,2.3350114/48.8476794,2.340595/48.8550395,2.300022/48.8417122,2.3028844"));
startActivity(intent);
첫 번째 좌표 세트는 시작 위치입니다. 다음은 모두 경로이며, 경로가 그려져 있습니다.
끝에 “/ 위도, 경도”를 연결하여 웨이 포인트를 계속 추가하십시오. google docs 에 따르면 23 웨이 포인트의 한계는 분명히 있습니다 . 그것이 Android에도 적용되는지 확실하지 않습니다.