无法加载Android谷歌地图V2

Raj*_*Raj 0 android google-maps google-play-services google-maps-android-api-2

我已经在我的应用程序中实现了android谷歌地图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();        
}
}
Run Code Online (Sandbox Code Playgroud)

下面是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_width="match_parent"
android:layout_height="match_parent"
map:cameraTilt="45"
map:cameraZoom="2" />
Run Code Online (Sandbox Code Playgroud)

这是清单文件.

<?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>
Run Code Online (Sandbox Code Playgroud)

当我检查日志时,它显示以下错误行.

 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.
Run Code Online (Sandbox Code Playgroud)

最后还有一个小疑问,我更新了设备中的护目镜地图应用程序,之后它正在运行.因此,当发现任何设备出现此类问题时,我希望向用户显示警报以进行更新.但无法知道如何检查这一点.所以任何人都可以建议一些方法来找到设备中的护目镜地图应用程序android护目镜播放服务是否支持这个Android Goggle Maps V2的版本.

任何解决方案将不胜感激.

Adr*_*uez 6

您可以将此代码添加到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();
    }
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助,欢呼!