답변:
다음과 같은 것을 사용할 수 있습니다.
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에서도 인 텐트를 사용할 수 있습니다.
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
이것은 "길 찾기"를 요청했기 때문에 약간의 주제가 아니지만 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 의도 도 참조하십시오.
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
않습니까?
현재 답변은 훌륭하지만 그중 어느 것도 내가 찾고있는 것을 전혀하지 않았지만 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"는 자전거입니다.
다음을 사용하여 운전, 걷기 및 자전거 모드를 설정할 수 있습니다.
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에도 적용되는지 확실하지 않습니다.
현재 방향에서 위도 및 경도를 표시하려면 다음을 사용할 수 있습니다.
길 찾기는 항상 사용자의 현재 위치에서 제공됩니다.
다음 쿼리는이를 수행하는 데 도움이됩니다. 목적지 위도 및 경도를 여기에서 전달할 수 있습니다.
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);
또는 location을 통해 표시하려면 다음을 사용하십시오.
google.navigation:q=a+street+address
추가 정보 : Android 용 Google지도 의도
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
DirectionsView
소스 위치를 현재 위치로 사용하고 문자열로 지정된 대상 위치를 가진 Google
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?f=d&daddr="+destinationCityName));
intent.setComponent(new ComponentName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
위의 destinationCityName
변수는 필요에 따라 수정 가능한 문자열입니다.
A 지점, B 지점 (및 그 사이에있는 기능 또는 트랙)을 알고 있으면 KML 파일을 의도와 함께 사용할 수 있습니다.
String kmlWebAddress = "http://www.afischer-online.de/sos/AFTrack/tracks/e1/01.24.Soltau2Wietzendorf.kml";
String uri = String.format(Locale.ENGLISH, "geo:0,0?q=%s",kmlWebAddress);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);
자세한 내용은 이 답변을 참조하십시오
참고 :이 예에서는 (mar13 기준) 여전히 온라인 상태 인 샘플 파일을 사용합니다. 오프라인 상태 인 경우 온라인에서 kml 파일을 찾고 URL을 변경하십시오.
먼저 암시 적 인 텐트를 사용할 수 있으므로 Android 설명서 에서 두 가지 매개 변수로 새 인 텐트를 만드는 데 필요한 맵 인 텐트 를 구현하기위한 매우 일반적인 공통 인 텐트 를 제공합니다.
우리가 사용할 수있는 조치 Intent.ACTION_VIEW
와 Uri의 경우 샘플 코드를 첨부하여 활동을 작성하고 빌드하고 시작하십시오.
String addressString = "1600 Amphitheatre Parkway, CA";
/*
Build the uri
*/
Uri.Builder builder = new Uri.Builder();
builder.scheme("geo")
.path("0,0")
.query(addressString);
Uri addressUri = builder.build();
/*
Intent to open the map
*/
Intent intent = new Intent(Intent.ACTION_VIEW, addressUri);
/*
verify if the devise can launch the map intent
*/
if (intent.resolveActivity(getPackageManager()) != null) {
/*
launch the intent
*/
startActivity(intent);
}
<scheme>://<authority><absolute path>?<query>#<fragment>
불투명 URI가 아닌 : 형식으로 절대 URI에 대해서만 작동합니다 <scheme>:<opaque part>#<fragment>
. 위의 코드는 다음 URI를 생성합니다. geo:/0%2C0?Eiffel%20Tower
이로 인해 Google지도 앱이 중단됩니다. 공식 문서 조차도 이러한 이유로 원시 / 불투명 URI를 사용합니다. 올바른 코드는 다음과 같습니다.Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
lakshman sai가 언급 한 최신 크로스 플랫폼 답변을 사용하는 멋진 kotlin 솔루션 ...
불필요한 Uri.toString과 Uri.parse는 없지만이 대답은 깨끗하고 최소한입니다.
val intentUri = Uri.Builder().apply {
scheme("https")
authority("www.google.com")
appendPath("maps")
appendPath("dir")
appendPath("")
appendQueryParameter("api", "1")
appendQueryParameter("destination", "${yourLocation.latitude},${yourLocation.longitude}")
}.build()
startActivity(Intent(Intent.ACTION_VIEW).apply {
data = intentUri
})
이 방법으로 Android의 의도를 통해 Google지도 길 찾기를 시작할 수 있습니다.
btn_search_route.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String source = et_source.getText().toString();
String destination = et_destination.getText().toString();
if (TextUtils.isEmpty(source)) {
et_source.setError("Enter Soruce point");
} else if (TextUtils.isEmpty(destination)) {
et_destination.setError("Enter Destination Point");
} else {
String sendstring="http://maps.google.com/maps?saddr=" +
source +
"&daddr=" +
destination;
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse(sendstring));
startActivity(intent);
}
}
});