我在latitude
和longitude
中有两个值。我有一把钥匙此按钮必须具有两个选项才能转到位置信息:Yandex Navi
和Google Maps
。当我单击按钮时,我想知道哪个人想打开它。我该怎么办?
答案 0 :(得分:1)
您可以像这样使用Intent.createChooser()
:
String url = "yandexmaps://maps.yandex.ru/?pt=" + latitude + "" + longitude + "&z=12&l=map";
Intent intentYandex = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intentYandex.setPackage("ru.yandex.yandexmaps");
String uriGoogle = "geo:" + latitude + "," + longitude;
Intent intentGoogle = new Intent(Intent.ACTION_VIEW, Uri.parse(uriGoogle));
intentGoogle.setPackage("com.google.android.apps.maps");
String title = "Select";
Intent chooserIntent = Intent.createChooser(intentGoogle, title);
Intent[] arr = new Intent[1];
arr[0] = intentYandex;
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arr);
startActivity(chooserIntent);
答案 1 :(得分:0)
如果绝对必须使用Google Maps或Yandex Navi,最简单的方法可能是找出用户要使用的对象(通过对话或类似方法),然后将其设置为Map的目标意图。例如,以下是Google's Android documentation的意图,该意图通过应用程序名称定位Google Maps:
// Creates an Intent that will load a map of San Francisco
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194");
Intent mapIntent = new Intent(Intent.ACTION_VIEW,
gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
通过将软件包设置为"ru.yandex.yandexnavi"
,这也可以与Navi一起使用。
不过,请注意,更标准的方法是使用Map Intent来指定目标应用程序。这样,您只需要提供坐标即可,然后用户可以使用他们选择的应用程序:
public void showMap(Uri geoLocation) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(geoLocation);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
答案 2 :(得分:0)
Andrii Omelchenko的答案总是为我打开Google Maps。但是在将Google和Yandex更改为ChooserIntent的顺序后,在我的情况下可以使用:
val uriYandex = "yandexnavi://build_route_on_map?lat_to=${latitude}&lon_to=${longitude}"
val intentYandex = Intent(Intent.ACTION_VIEW, Uri.parse(uriYandex))
intentYandex.setPackage("ru.yandex.yandexnavi")
val uriGoogle = Uri.parse("google.navigation:q=${latitude},${longitude}&mode=w")
val intentGoogle = Intent(Intent.ACTION_VIEW, uriGoogle)
intentGoogle.setPackage("com.google.android.apps.maps")
val chooserIntent = Intent.createChooser(intentYandex, title)
val arr = arrayOfNulls<Intent>(1)
arr[0] = intentGoogle
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arr)
val activities = packageManager.queryIntentActivities(chooserIntent, 0)
if(activities.size>0){
startActivity(chooserIntent)
}else{
//do sth..
}