我正在尝试在SDK版本10上创建一个MapView,但是如何创建MapView的所有示例都使用Fragments,它仅在API 11中。
https://developers.google.com/maps/documentation/android/map#add_a_map_to_an_android_application
我不想添加额外的支持库。
我能够加载应用,但地图显示为空灰色网格。它们在日志文件中显示为唯一的半相关行:
03-08 23:20:25.088: W/dalvikvm(32615): VFY: unable to resolve instance field 23
03-08 23:20:25.088: D/dalvikvm(32615): VFY: replacing opcode 0x52 at 0x0012
03-08 23:20:25.088: D/dalvikvm(32615): VFY: dead code 0x0014-0018 in Lcom/google/android/gms/common/GooglePlayServicesUtil;.b (Landroid/content/res/Resources;)Z
03-08 23:20:25.213: D/dalvikvm(32615): GC_CONCURRENT freed 1276K, 48% free 3765K/7175K, external 9476K/10157K, paused 5ms+8ms
03-08 23:20:25.236: I/dalvikvm(32615): Total arena pages for JIT: 11
03-08 23:20:25.541: W/dalvikvm(32615): Unable to resolve superclass of Lmaps/p/s; (427)
03-08 23:20:25.541: W/dalvikvm(32615): Link of class 'Lmaps/p/s;' failed
03-08 23:20:25.541: W/dalvikvm(32615): Unable to resolve superclass of Lmaps/y/bo; (3820)
03-08 23:20:25.541: W/dalvikvm(32615): Link of class 'Lmaps/y/bo;' failed
03-08 23:20:25.541: W/dalvikvm(32615): Unable to resolve superclass of Lmaps/i/k; (4208)
03-08 23:20:25.541: W/dalvikvm(32615): Link of class 'Lmaps/i/k;' failed
03-08 23:20:25.541: E/dalvikvm(32615): Could not find class 'maps.i.k', referenced from method maps.z.ag.a
03-08 23:20:25.541: W/dalvikvm(32615): VFY: unable to resolve new-instance 3540 (Lmaps/i/k;) in Lmaps/z/ag;
03-08 23:20:25.541: D/dalvikvm(32615): VFY: replacing opcode 0x22 at 0x006d
03-08 23:20:25.627: D/dalvikvm(32615): VFY: dead code 0x006f-007f in Lmaps/z/ag;.a (Landroid/view/LayoutInflater;Lcom/google/android/gms/maps/GoogleMapOptions;ZLjava/lang/String;)Lmaps/z/ag;
03-08 23:20:26.275: D/MPAY(32615): map = com.google.android.gms.maps.GoogleMap@40718398
答案 0 :(得分:1)
由于API 11或更高版本支持片段,因此地图现已封装在MapFragment
类中,这是Android Fragment
类的扩展。现在,您可以将地图添加为较大活动的一部分。使用MapFragment
对象,您可以在较小的屏幕上(例如移动电话)单独显示地图,或者在大屏幕设备(如平板电脑)上显示更复杂的UI的一部分。因此,谷歌还提供了支持库,以便在API 11或更低版本中实现它。
您可以在应用中使用android-support-v4.jar
库并按以下方式实施Google地图:
在项目Goto->android SDK->extras->android->support->v4->android-support-v4.jar
中添加支持库。只需复制此jar文件并添加到应用程序的libs文件夹中,然后添加到构建路径。之后,您可以使用片段添加GoogleMap。
在这里,我将向您展示如何在API 10或更低版本中实施GoogleMap:
首先我们需要为GoogleMap使用支持库Fragment,而不是MapFragment
我们将在布局文件中使用SupportMapFragment
。
<fragment xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment"/>
在您的java文件中访问地图如下:
public class MapActivity extends android.support.v4.app.FragmentActivity { private GoogleMap mMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Try to obtain the map from the SupportMapFragment. mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) .getMap(); } }
答案 1 :(得分:0)
我认为答案是你(可能)不能。
Google Maps Android API v2概述说明了这一点:
- 地图现在封装在MapFragment类中,这是Android的Fragment类的扩展。现在,您可以将地图添加为更大的一块 活动。使用MapFragment对象,您可以单独显示地图 较小的屏幕,如手机,或作为更复杂的一部分 大屏幕设备上的用户界面,例如平板电脑。
- 由于地图封装在MapFragment类中,您可以通过扩展Android标准Activity类来实现它们, 而不是扩展版本1中使用的MapActivity。
虽然没有明确说明,但我认为这意味着v2中的地图基本上依赖于Fragment。
如果您需要使用SDK 10或更早版本,并且无法使用某种Fragment
的后端,那么您可能无法使用Google Maps API v2。
答案 2 :(得分:0)
目前支持所有版本,没有库你不能使用它。特别是杰克
wharton的sherlock图书馆https://github.com/JakeWharton/ActionBarSherlock为您提供
支持所有版本。您可以将mapview气球用于MapView和android sherlock mapview
已提供jar文件。您可以使用它。
https://github.com/JakeWharton/ActionBarSherlock-Plugin-Maps/
答案 3 :(得分:0)
我发现了怎么样。这是一堆小东西,包括我必须实现onResume(),onPause()等...我想我可以通过调用mapView.onCreate()进行测试,但我想这还不够。
我还在Google Play图书馆...\Java\android-sdk\extras\google\google_play_services\samples\maps\src\com\example\mapdemo\RawMapViewDemoActivity.java
该示例扩展了FragmentActivity,但这不是必需的,也不是导入android.support.v4。*。
public class RawMapViewDemoActivity extends Activity {
private MapView mMapView;
private GoogleMap mMap;
protected void onCreate(Bundle savedInstanceState) {
...
mMapView = (MapView) findViewById(R.id.map);
mMapView.onCreate(savedInstanceState);
protected void onResume() {
super.onResume();
mMapView.onResume();
protected void onPause() {
mMapView.onPause();
super.onPause();
protected void onDestroy() {
mMapView.onDestroy();
super.onDestroy();
public void onLowMemory() {
super.onLowMemory();
mMapView.onLowMemory();
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mMapView.onSaveInstanceState(outState);