显示Android api V2的地图

时间:2012-12-11 17:31:23

标签: android google-maps

我正在尝试使用新的api在我的应用中显示地图,但我得到的只是:

“Google Play服务的未知问题”

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.monitoringsensors"
android:versionCode="1"
android:versionName="1.0" 
>

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16"/>

<uses-permission android:name="android.permission.INTERNET"/> 

<permission
      android:name="com.example.monitoringsensors.MAPS_RECEIVE"
      android:protectionLevel="signature"/>


<uses-permission android:name="com.example.monitoringsensors.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<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"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" 

    >


    <activity
        android:name="com.example.monitoringsensors.Title"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name="com.example.monitoringsensors.HttpExample"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.HTTPEXAMPLE" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

     <activity
        android:name="com.example.monitoringsensors.TakeSomeData"
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.Dialog">
        <intent-filter>
            <action android:name="android.intent.action.TAKESOMEDATA" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>



     <meta-data android:name="com.google.android.maps.v2.API_KEY"
           android:value="AIzaSyCW3iv83siHrkWM6Q2qV4YcXk27CZWwmqc"></meta-data>

</application>

</manifest>

这是XML文件:

    <?xml version="1.0" encoding="utf-8"?>
    <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"/>

这个类就像这样调用:

  public class HttpExample  extends android.support.v4.app.FragmentActivity {...}

谢谢伙伴们!

2 个答案:

答案 0 :(得分:1)

您需要验证地图的可用性 在您与GoogleMap对象进行互动之前,您需要确认可以实例化对象,并确保Google Play服务组件已正确安装在目标设备上。您可以通过调用MapFragment.getMap()或MapView.getMap()方法并检查返回的对象是否为null来验证GoogleMap是否可用。 https://developers.google.com/maps/documentation/android/map#verify_map_availability

答案 1 :(得分:0)

我个人使用此代码检查Google Play服务,我在运行2.3.3的真实设备和各种版本的操作系统上测试模拟器,它可以防止模拟器破坏,因为它们没有更新支持Android Google地图v2的Google Play服务。
protected boolean readyToGo() {

String TAG_ERROR_DIALOG_FRAGMENT="errorDialog";

int status= GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (status == ConnectionResult.SUCCESS) {
      return(true);
    }
    else if (GooglePlayServicesUtil.isUserRecoverableError(status)) {
      ErrorDialogFragment.newInstance(status)
                         .show(getSupportFragmentManager(),
                               TAG_ERROR_DIALOG_FRAGMENT);
    }
    else {
      Toast.makeText(this, "no maps", Toast.LENGTH_LONG).show();
      finish();
    }

    return(false);
  }

String TAG_ERROR_DIALOG_FRAGMENT="errorDialog"; int status= GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); if (status == ConnectionResult.SUCCESS) { return(true); } else if (GooglePlayServicesUtil.isUserRecoverableError(status)) { ErrorDialogFragment.newInstance(status) .show(getSupportFragmentManager(), TAG_ERROR_DIALOG_FRAGMENT); } else { Toast.makeText(this, "no maps", Toast.LENGTH_LONG).show(); finish(); } return(false); } 如果它能够显示地图,则返回true,表示设备具有所需的Google Play服务;如果不能,则返回false,这就是Eclipse中标准模拟器的情况,现在就是这样。