Android Maps API需要openGL es 2

roc*_*cko 34 android google-maps-android-api-2

Maps v2文档说明:

由于Google Maps Android API的第2版需要OpenGL ES版本2,因此您必须在AndroidManifest.xml中添加<uses-feature>元素作为元素的子 manifest元素:

<uses-feature   
   android:glEsVersion="0x00020000"  
   android:required="true"/>` 
Run Code Online (Sandbox Code Playgroud)

这会向外部服务通知该要求.特别是,它可以防止Google Play商店在不支持OpenGL ES版本2的设备上显示您的应用.

事实上,exception如果不在清单中,它会抛出一个.我不想在商店中过滤我的应用程序,我计划继续使用旧设备的旧地图,并且只有在运行时检测到所需的功能时才显示新地图,而不是在安装之前检测到.

那我该怎么做?是否必须是多个APKs不同的东西manifests

Jam*_*ald 35

最后更新

截至2013/12/20,Android Dashboard显示大约100%的设备现在支持OpenGL 2.0+,因此这个答案已不再适用.您可能只需要清单中的OpenGL ES 2.0+.

更新

这是在Google Play Services SDK插件的第7版中修复的.在运行时使用<uses-feature android:glEsVersion="0x00020000" android:required="false"/>检测OpenGL ES 2.0是安全的.

原始答案

Google Maps Android API v2似乎需要明确<uses-feature android:glEsVersion="0x00020000" android:required="true/>声明,AndroidManifest.xml因此无法排除所有OpenGL ES 1.x设备,无法部署Google Maps Android API v2服务.在撰写本文时,谷歌的Android仪表板显示,在1.1和2.0设备中,90.8%的设备支持2.0.

在特定设备(Motorola XOOM)上,此代码会导致supportsEs2 = true:

// Check if the system supports OpenGL ES 2.0.
final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
Run Code Online (Sandbox Code Playgroud)

但是,当<uses-feature>清单中没有声明时,MapFragment会抛出RuntimeException:

    Caused by: java.lang.RuntimeException: Google Maps Android API only supports OpenGL ES 2.0 andabove. Please add <uses-feature android:glEsVersion="0x00020000" android:required="true" /> into AndroidManifest.xml
    at maps.y.ae.a(Unknown Source)
    at maps.y.bu.a(Unknown Source)
    at maps.y.p.onCreateView(Unknown Source)
    at com.google.android.gms.maps.internal.IMapFragmentDelegate$Stub.onTransact(IMapFragmentDelegate.java:107)
    at android.os.Binder.transact(Binder.java:297)
    at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onCreateView(Unknown Source)
    at com.google.android.gms.maps.SupportMapFragment$a.onCreateView(Unknown Source)
    at com.google.android.gms.internal.c$4.a(Unknown Source)
    at com.google.android.gms.internal.c.a(Unknown Source)
    at com.google.android.gms.internal.c.onCreateView(Unknown Source)
    at com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:884)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1066)
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1168)
    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:280)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669)
    ... 22 more
Run Code Online (Sandbox Code Playgroud)

这是希望地图库的更新将消除此限制,以便我们可以部署单个APK并使用运行时API来确定是否加载新的Google Maps v2体验或回退到另一个兼容的解决方案.

  • 此问题在此处进行了跟踪:http://code.google.com/p/gmaps-api-issues/issues/detail?id = 4699不要忘记为问题加注星标,希望能引起注意.截至2012年12月,只有7票. (4认同)