我开发了一个应用程序,其中我想使用谷歌地图来显示位置视图,我已经从堆栈溢出和谷歌找到了许多有用的概念,并通过以下所有成功实现我的应用程序。我的应用程序正在运行没有任何错误,但没有显示正确的地图。
我得到的输出:
这是我的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
}
}
我已经在清单文件中给出了所有权限,但没有得到正确的东西,请让我知道我在哪里做错了。
答案 0 :(得分:1)
请参阅given link中的代码。可以帮到你。
答案 1 :(得分:0)
使用V2。谷歌地图v1已被弃用,并且在2013年2月至3月期间不再维护密钥
对于谷歌地图v2,你有两把钥匙。调试和释放密钥。调试键很常见。但是当你使用签名的apk时,使用释放键或者map看起来是空白的。
对于发布密钥程序,请点击此处。
Google Map Android API v2 can't display map in play store application
答案 2 :(得分:0)
您应该将地图实现移动到API V2而不是API V1,因为这里已经说过不推荐使用API版本,这意味着您不能再为此版本生成API密钥。我的问题是你有一个V2的密钥,你正试图在V1实现中使用它。
要将代码移至API V2实现,请按照我在此事上撰写的以下博客文章:
答案 3 :(得分:0)
Google Map V1 API Documentation说:
Google Maps Android API版本1已正式发布 截至2012年12月3日已弃用。这意味着从3月18日起, 2013年,您将无法再为此请求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用于新应用程序。