回答:
次のようなものを使用できます。
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 ...
か?
現在の答えは素晴らしいですが、それらのどれも私が探していたものを完全に実行しませんでした、私はマップアプリのみを開き、ソースの場所と目的地のそれぞれに名前を追加したいのですが、geo URIスキームを使用すると機能しませんまったく、マップのWebリンクにはラベルがなかったので、私はこのソリューションを思いつきました。これは基本的に、ここで行われた他のソリューションとコメントの融合であり、うまくいけば、この質問を見る他の人に役立つでしょう。
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();
}
}
PS私の例で使用されている緯度または経度は私の場所を表すものではありません。実際の場所に似ていることは純粋に偶然であり、別名アフリカではありません: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」は自転車用です。
以下を使用して、運転、歩行、自転車モードを設定できます。
グーグルマップを使用したインテントの詳細については、こちらをご覧ください。
注:自転車/車/徒歩のルートがない場合は、「そこに道が見つかりません」と表示されます。
Intent.setClassName
メソッドを使用して、組み込みアプリケーションAndroid Mapsを開こうとすることができます。
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);
座標の最初のセットは、開始位置です。次のすべてはウェイポイントであり、プロットされたルートが通過します。
最後に「/ latitude、longitude」を連結してウェイポイントを追加してください。グーグルドキュメントによると、明らかに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);
または、場所を介して表示する場合は、次を使用します。
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
の文字列は、必要に応じて変更された変数です。
これを試して
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr="+src_lat+","+src_ltg+"&daddr="+des_lat+","+des_ltg));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);
ポイント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);
詳細については、このSOの回答を参照してください
注:この例では、(mar13現在)まだオンラインであるサンプルファイルを使用しています。オフラインになった場合は、KMLファイルをオンラインで見つけてURLを変更します
最初に、暗黙のインテントを使用できるようにする必要があります。Androidドキュメントには 、2つのパラメーターで新しいインテントを作成するために必要なマップインテントを実装するための非常に詳細な共通インテントが用意されています
使用できるアクション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マップアプリがクラッシュします。公式ドキュメントでさえ、まさにこの理由でraw /不透明な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);
}
}
});