0

我开发了一个应用程序,我想在其中使用谷歌地图来显示位置视图,我从堆栈溢出和谷歌也发现了许多有用的概念,并通过遵循这些成功实现了我的应用程序。我的应用程序正在运行,没有任何错误但没有显示正确的地图。

我得到的输出:

在此处输入图像描述

这是我的 Java 文件:

    package com.mapactivity;

import java.util.List;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.KeyEvent;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.Overlay;

public class MainActivity extends MapActivity implements LocationListener{

    MapView mapView;
    MapController mc;
    GeoPoint gp;
    MyLocationOverlay compass;
    long start;
    long stop;

    Drawable d;
    List<Overlay> overlayList;
    LocationManager lm;
    String towers;
    /*int lat;
    int longi;*/

    int x,y;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mapView = (MapView) findViewById(R.id.mapView);

        mapView.setTraffic(true);
        mapView.setBuiltInZoomControls(true);
        mapView.setSatellite(true);


        mc = mapView.getController();

        String cordinate[] = {"28.636041","77.223957"};

        double lat = Double.parseDouble(cordinate[0]);
        double lng = Double.parseDouble(cordinate[1]);

        gp = new GeoPoint((int)(lat*1E6), (int)(lng*1E6));

        mc.animateTo(gp);
        mc.setZoom(13);


        MapOverlay mo = new MapOverlay();
        List<Overlay> list = mapView.getOverlays();
        list.clear();
        list.add(mo);

        mapView.invalidate();


    }

    public boolean onKeyDown(int keyCode,KeyEvent event)
    {
        mc = mapView.getController();
        switch (keyCode) {
        case KeyEvent.KEYCODE_3:
            mc.zoomIn();

            break;

        case KeyEvent.KEYCODE_1:
            mc.zoomOut();
        }
        return super.onKeyDown(keyCode, event);

    }
    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
    private class MapOverlay extends com.google.android.maps.Overlay
    {

        @Override
        public boolean draw(Canvas canvas, MapView mapview, boolean shadow, long when) {
            // TODO Auto-generated method stub
            super.draw(canvas, mapview, shadow);

            Point screenPoint = new Point();
            mapview.getProjection().toPixels(gp, screenPoint);
            Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker_landmark);
            canvas.drawBitmap(bmp, screenPoint.x, screenPoint.y-50,null);

            return true;

        }

    }

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

}

而且我也在清单文件中授予了所有权限,但没有得到正确的东西,请让我知道我做错了什么。

4

4 回答 4

1

请参阅给定链接中的代码。愿它对你有所帮助。

于 2013-09-25T10:13:26.303 回答
0

使用 V2。2013 年 2 月至 2013 年 2 月,Google 地图 v1 已被弃用,密钥不再维护

对于 google map v2,您有两个键。调试和释放密钥。调试密钥很常见。但是当您使用签名的 apk 时,请使用发布密钥,否则地图看起来是空白的。

释放密钥程序在这里。

Google Map Android API v2 无法在 Play 商店应用程序中显示地图

于 2013-09-25T10:41:05.110 回答
0

您应该将您的地图实现移动到 API V2 而不是 API V1,因为正如这里已经说过的,该 API 版本已被弃用,这意味着您不能再为该版本生成 API 密钥。我的问题是你有一个 V2 的密钥,并且你正在尝试将它与 V1 实现一起使用。

要将您的代码移动到 API V2 实现,请遵循我就此事撰写的以下博客文章:

谷歌地图 API V2

于 2013-09-25T10:46:20.733 回答
0

Google Map V1 API 文档说:

自 2012 年 12 月 3 日起,第 1 版 Google Maps Android API 已正式弃用。这意味着从 2013 年 3 月 18 日起,您将无法再请求此版本的 API 密钥。Google Maps Android API v1 不会添加任何新功能。但是,使用 v1 的应用程序将继续在设备上运行。鼓励现有和新开发人员使用 Google Maps Android API v2。

现在只有那些应用程序可以与在 2013 年 3 月 18 日之前生成密钥的旧 Google MAP API 一起正常工作。

由于您现在正在使用旧的折旧 API 开发应用程序,我猜您已经为较新版本生成了 API 密钥,但您正在尝试将它与旧的 API 实现一起使用。新的 API 密钥不适用于旧 API。

推荐使用Google Map V2进行新应用。

于 2013-09-25T10:48:57.500 回答