我正在尝试实施谷歌地图V2,但地图显示为空白。我编辑了清单,创建了xml布局和活动,但地图显示为空白。
以下是我对清单的所作所为:
<permission
android:name="com.biznismap.com.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.biznismap.com.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
并将其添加为清单中应用程序节点的第一个子节点:
<uses-library android:name="com.google.android.maps" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="my_key" />
这是我的地图xml布局:
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="my_key"
android:clickable="true" />
这是我的MapActivity:
public class ListingMap extends MapActivity {
private HelloItemizedOverlay itemizedoverlay;
private List<Overlay> mapOverlays;
private String lat, lng;
@Override
protected boolean isRouteDisplayed() {
return false;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listing_map);
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(
R.drawable.ic_launcher);
itemizedoverlay = new HelloItemizedOverlay(drawable);
getExtras();
}
private void getExtras() {
Bundle extras = getIntent().getExtras();
lat = extras.getString("lat");
lng = extras.getString("lng");
Log.v("--", lat+" "+lng);
float latitude=Float.valueOf(lat);
float longitude=Float.valueOf(lng);
GeoPoint point = new GeoPoint((int)(latitude * 1E6),(int)(longitude * 1E6));
OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!",
"I'm in Mexico City!");
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
}
}
所以一切都顺利但是,当我想显示某些内容时,地图是空白的,我从模拟器中得到了这个:
06-02 17:09:26.921: E/MapActivity(1772): Couldn't get connection factory client
那么我哪里出错了,我该如何解决这个问题?
答案 0 :(得分:1)
这里有两个问题。在v2中,您可能不会使用
<uses-library android:name="com.google.android.maps" />
,您的布局无效。如果你想要完整的布局图,只需使用:
<FrameLayout
... >
<fragment
...
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
</FrameLayout>
在Java代码上,使用FragmentActivity和:
map = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.your_id)).getMap();
这样,您将获得与蜂窝前设备的兼容性。祝你好运!
答案 1 :(得分:0)
要么您没有互联网连接(我的猜测),要么您输入的密钥不正确。仔细检查这两件事。
另外,请确保您用于测试的模拟器(如果适用)已安装Google API。
答案 2 :(得分:0)
MapView
。而是使用:
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
因此,请使用FragmentActivity
代替MapActivity
并为地图充气。
您可以查看Loading Map using Google Map API V2了解详情
答案 3 :(得分:0)
以下是https://developers.google.com/maps/documentation/android/v1/hello-mapview所说的内容:
注意:截至2012年12月3日,Google Maps Android API版本1已正式弃用。这意味着从2013年3月18日起,您将无法再为此版本请求API密钥。 Google Maps Android API v1不会添加任何新功能。但是,使用v1的应用程序将继续在设备上运行。鼓励现有和新开发人员使用Google Maps Android API v2。
您的代码是miximg v1和v2属性。