MapView在谷歌地图API v2 Android版中显示空磁贴

MapView在谷歌地图API v2 Android版中显示空磁贴,android,google-maps-android-api-2,Android,Google Maps Android Api 2,我正在将我的应用程序移动到新的谷歌Android API上。我决定使用地图视图而不是片段,因为地图是片段的一部分。 我已经成功地用MapFragment显示了一个地图,但是当尝试用MapView执行同样的操作时,它只显示空的分幅。 有人知道我遗漏了什么吗? 以下是清单文件中的权限: <permission android:name="com.beezer.permission.MAPS_RECEIVE" android:protectionLevel="

我正在将我的应用程序移动到新的谷歌Android API上。我决定使用地图视图而不是片段,因为地图是片段的一部分。 我已经成功地用MapFragment显示了一个地图,但是当尝试用MapView执行同样的操作时,它只显示空的分幅。 有人知道我遗漏了什么吗? 以下是清单文件中的权限:

<permission android:name="com.beezer.permission.MAPS_RECEIVE" 
                 android:protectionLevel="signature"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.beezer.permission.MAPS_RECEIVE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


我在日志中没有发现任何错误。

我只能解决两个问题:

  • 生成的签名与maps api密钥不匹配
  • 您没有从MapActivity内部使用MapView。否则它不会起作用

  • 您是否转发了此处所述的所有活动生命周期方法

    此类的用户必须将所有活动生命周期方法(如onCreate()、onDestroy()、onResume()和onPause())转发到MapView类中相应的方法


    我的api键可以工作,因为如果我在xml视图中使用MapFragment,那么地图就会显示得很好。最终,我使用新的支持库中支持的嵌套片段解决了这个问题。这使得解决方案更加优雅。我有同样的问题,mapView变量集在哪里?我对片段使用自定义布局,此布局包含
    MapView
    ,此
    MapView
    的实例只能在
    onViewCreated
    调用期间获得,此时布局已膨胀。但是前面调用了
    onCreate
    方法,因此mapView变量在这次为空……好的,我明白了:)谢谢您的回答。
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mapView.onCreate(savedInstanceState);
        try {
           MapsInitializer.initialize(mContext);
        } catch (GooglePlayServicesNotAvailableException e) {
           e.printStackTrace();
        }
     }
    
    @Override
    public void onPause() {
        super.onPause();
        mapView.onPause();
    }
    
    @Override
    public void onResume() {
       super.onResume();
       mapView.onResume();
    }
    
    @Override
    public void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }