4

在我的应用程序中,用户可以保存特定位置的纬度和经度。我希望他们能够通过诸如谷歌地图之类的地理意图在手机上启动其他应用程序,以便他们可以轻松地获得返回的确切方向。这是我用来生成地理意图的代码:

public static Intent getFindIntent(Context context) {
    Intent intent = new Intent();

    SharedPreferences prefs = Tools.getPrefs(context);
    String latitude = prefs.getString(Const.LAT_KEY, "");
    String longitude = prefs.getString(Const.LONG_KEY, "");

    intent.setAction(Intent.ACTION_VIEW);
    String uri = String.format(Locale.US, "geo:%s,%s?z=%d&q=%s,%s", latitude, longitude,
            Const.ZOOM_LEVEL, latitude, longitude);


    intent.setData(Uri.parse(uri));

    return intent;
}

显然大多数人都会使用谷歌地图,因为它在每个人的手机上。当我第一次发布我的应用程序时,谷歌地图会启动并在地理 uri 的 q 参数中指定的精确坐标放置一个图钉,该参数设置为意图的数据。随着 Google Maps 7 的发布,地图似乎在距离提供的坐标最近的地址处放置了一个大头针。这给我带来了一个问题,因为用户应该能够准确地导航回保存的位置,而不是它附近的地址。我发现这个记录的唯一地方是这里. 这些文档来自官方的 Android 开发者网站,但非常稀少。是否有替代地理意图来提供此功能,或者我的代码有问题?我认为谷歌地图违反了它的 API 合同,因为我提供的是坐标而不是地址。

4

1 回答 1

1

要删除 pin,请使用以下代码:

 try {
    Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
        Uri.parse("geo:" + AppointmentDetailLayout.docLatitude
            + "," + AppointmentDetailLayout.docLongitude
            + "?q=" + AppointmentDetailLayout.docLatitude
            + "," + AppointmentDetailLayout.docLongitude
            + "(" + label + ")"));
    intent.setComponent(new ComponentName(
        "com.google.android.apps.maps",
        "com.google.android.maps.MapsActivity"));
    context.startActivity(intent);
    } catch (ActivityNotFoundException e) {

    try {
        context.startActivity(new Intent(
            Intent.ACTION_VIEW,
            Uri.parse("market://details?id=com.google.android.apps.maps")));
    } catch (android.content.ActivityNotFoundException anfe) {
        context.startActivity(new Intent(
            Intent.ACTION_VIEW,
            Uri.parse("http://play.google.com/store/apps/details?id=com.google.android.apps.maps")));
    }

    e.printStackTrace();
    }

对于方向使用这个:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
        Uri.parse("http://maps.google.com/maps?saddr=" + lat
            + "," + lng + "&daddr="
            + AppointmentDetailLayout.docLatitude + ","
            + AppointmentDetailLayout.docLongitude));

    context.startActivity(intent);
于 2013-09-30T12:06:57.537 回答