如何向用户询问Yandex Navi或Google Maps?如何指导?

时间:2018-08-16 15:03:17

标签: android google-maps android-location yandex-maps

我在latitudelongitude中有两个值。我有一把钥匙此按钮必须具有两个选项才能转到位置信息:Yandex NaviGoogle Maps。当我单击按钮时,我想知道哪个人想打开它。我该怎么办?

3 个答案:

答案 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的答案总是为我打开Goog​​le 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..
    }