我在我的 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.