0

我在我的 Android 项目中使用 Google Maps Android v2。

我在 3 台设备上进行了测试:HTC Vivid (4.0.3)、Asus Nexus 7 (4.2.2) 和 Galaxy S2 (2.2)。该地图仅使用上述信息显示在 Galaxy S2 上,所以我知道一切都应该正常工作。

问题:我需要做些什么来增加兼容性,或者简单地修复更高 API 版本的错误?

我做了以下事情:

  • 生成密钥库(调试和自定义)并将它们的 SHA-1 代码和包名称注册到 Google API 控制台。我已经使用两个 API 密钥尝试了该程序,并且都返回了相同的空白屏幕和错误。在调试模式下使用程序表明已尝试访问控制台中报告日志中的 API。
  • 导入 android-support-v4.jar 文件
  • 导入 google-play-services_lib 项目文件夹,将其设置为库,并将我的项目配置为使用该库。
  • 使用以下代码设置我的“my_map.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" />
    
  • 使用以下代码设置我的活动类

    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.SupportMapFragment;
    import com.google.android.gms.maps.model.LatLng;
    import com.google.android.gms.maps.model.MarkerOptions;
    
    import android.os.Bundle;
    import android.view.Menu;
    
    public class MapActivity extends android.support.v4.app.FragmentActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_map);
    
    GoogleMap map = 
                ((SupportMapFragment)getSupportFragmentManager()
                .findFragmentById(R.id.map)).getMap();
    map.addMarker(new MarkerOptions().position(new
                LatLng(34.739849,-92.307129)).title("SwagString"));
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.map, menu);
    return true;
    }
    }
    
  • 我拥有所有必需的权限
  • 我已将密钥的元数据添加到我的 AndroidManifest.xml

  • 权限:

    <permission
    android:name="com.uaex.droughtadvisor.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />
    
    <uses-permission android:name="com.uaex.droughtadvisor.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-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    
  • 元数据

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />
    
  • 在 4.0 及以上设备上运行代码时,我收到此错误:

    Failed to load map. Error contacting Google Servers.
    
4

1 回答 1

1

我不确定它是什么,但我得到了它的工作。最初我的目标是 2.2,然后我在我的 SDK 管理器中下载了其他版本并尝试了那些(只有 4.0.3 和 4.2.2,因为这些是我的测试设备的版本)。我瞄准了这些并将它们安装在各自的设备上并且它起作用了。回到 2.2,它们仍然有效,而最初它们没有。不知道这里发生了什么,但我现在很好。

于 2013-07-18T03:45:27.703 回答