Aktualizacja Finał
dzień 2013/12/20, że Android Dashboard pokazuje, że około 100% urządzeń obecnie obsługują OpenGL 2.0+ więc ta odpowiedź nie jest już istotne. Możesz po prostu wymagać OpenGL ES 2.0+ w swoim manifeście.
Aktualizacja
ta jest ustalana jako rev 7 Google Play Services SDK add-on. Jest bezpieczny w użyciu <uses-feature android:glEsVersion="0x00020000" android:required="false"/>
i detect OpenGL ES 2.0 at runtime.
odpowiedź Original
Wydaje się, że Mapy Google Android API v2 wymaga wyraźnej <uses-feature android:glEsVersion="0x00020000" android:required="true/>
oświadczenie AndroidManifest.xml
więc nie ma sposobu, aby wdrożyć usługi Mapy Google Android API v2 bez wyłączania wszystkich urządzeń 1.x OpenGL ES . W chwili pisania tego artykułu, Google's Android Dashboard pokazuje, że wśród urządzeń 1.1 i 2.0 90,8% urządzeń obsługuje wersję 2.0.
na określonym urządzeniu (Motorola XOOM), kod ten powoduje 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;
Jednak, gdy nie ma deklaracji w manifeście <uses-feature>
, MapFragment jest rzucanie 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
Mamy nadzieję, że aktualizacja biblioteki Map usunie to ograniczenie, więc możemy wdrożyć pojedynczy pakiet APK i korzystać z interfejsów API środowiska wykonawczego, aby określić, czy załadować nowe doświadczenie w Mapach Google v2, czy też wrócić do innego kompatybilnego rozwiązanie.
Po prostu android: required = "false". Wtedy nie powinno się go filtrować. – thaussma
'android: required =" false "' wyniki w '12-05 22: 18: 31.484: E/AndroidRuntime (9618): Spowodowane przez: java.lang.RuntimeException: Google Maps Android API obsługuje tylko OpenGL ES 2.0 i nowsze. Dodaj do AndroidManifest.xml 'na Nexusie S 4.1.2 –
qubz
Ten sam problem tutaj, jeśli usunę wymaganie z manifestu (lub set required = "false") MapFragment zgłasza wyjątek na urządzeniu, które obsługuje OpenGL ES 2.0. Wygląda to tak, jakby MapFragment szukał wymagań w konfiguracji usługi działań, zamiast sprawdzać, czy samo urządzenie obsługuje OpenGL ES 2.0. –