无法加载安卓谷歌地图 V2
Posted
技术标签:
【中文标题】无法加载安卓谷歌地图 V2【英文标题】:Unable to load android Google Maps V2 【发布时间】:2013-04-30 00:25:45 【问题描述】:我已经在我的应用程序中实现了 android Google maps V2,并且它在大多数设备(Galaxy Ace Plus、Galaxy 7inch Tab、Sony Xperia Z)上都能正常工作我测试。但它不适用于 HTC Desire。我已经交叉验证了该设备中也安装了 Google Play 服务。我花了很多时间寻找解决方案。下面是我的实现。
public class MainActivity extends FragmentActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupportMapFragment fragment = new SupportMapFragment();
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, fragment).commit();
下面是activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/the_map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_
android:layout_
map:cameraTilt="45"
map:cameraZoom="2" />
这里是清单文件。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.raj.googlemapsv2test"
android:versionCode="1"
android:versionName="1.0" >
<permission
android:name="com.raj.googlemapsv2test.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="com.raj.googlemapsv2test.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyDD6bvUVkTk2UzOLpojdeBtlh5xBYDhy6E" />
<activity
android:name="com.raj.googlemapsv2test.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
当我检查日志时,它显示以下错误行。
Could not find class 'maps.i.k', referenced from method maps.z.ag.a
Failed to load map. Could not contact Google servers.
Failed to load map. Could not contact Google servers.
最后带着一点疑问,我更新了设备中的 goggle 地图应用程序,之后它就可以工作了。 因此,当任何设备发现此类问题时,我想向用户显示更新警报。但无法知道如何检查。那么任何人都可以提出一些方法来查找设备中的goggle maps app和android goggle play services是否支持这个android Goggle Maps V2 与否。
我们将不胜感激任何解决方案。
【问题讨论】:
我在 HTC Desire 上遇到了类似的问题,除了我说“找不到类 'maps.af.k',引用自方法 maps.ag.an.a”。它还说它“无法解析 Lmaps/p/w 的超类;(734)”。像你说的那样更新谷歌地图应用并没有解决问题,我仍然看不到地图。 【参考方案1】:您可以将此代码添加到您的 onResume 方法中。它会检查用户是否拥有 Google Play 服务的更新版本,如果没有,则会显示一个将他重定向到 Google Play 的弹出窗口。
@Override
protected void onResume()
super.onResume();
int errorCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if(errorCode != ConnectionResult.SUCCESS && GooglePlayServicesUtil.isUserRecoverableError(errorCode))
Dialog d = GooglePlayServicesUtil.getErrorDialog(errorCode, this, 0, new OnCancelListener()
@Override
public void onCancel(DialogInterface dialog)
//As my application does a heavy use of maps, if the user cancels the dialog, I just finish the FragmentActivity
MainFragmentActivity.this.finish();
);
d.show();
希望对您有所帮助,干杯!
【讨论】:
【参考方案2】:@Override
public void onActivityCreated(Bundle savedInstanceState)
super.onActivityCreated(savedInstanceState);
FragmentManager fm = getChildFragmentManager();
supportMapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map);
if (supportMapFragment == null)
supportMapFragment = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.map, supportMapFragment).commit();
此时 google play 服务尚未初始化,因此请获取地图并在 onResume() 或 onStart() 中添加您想要的内容
@Override
public void onResume()
super.onResume();
if (gMap == null)
supportMapFragment.getMapAsync(this);
添加后你需要实现 OnMapReadyCallback。并用地图做任何你喜欢做的操作。
【讨论】:
以上是关于无法加载安卓谷歌地图 V2的主要内容,如果未能解决你的问题,请参考以下文章
无法将谷歌静态地图加载到jquery mobile中的div中