2012-12-05 15 views
30

map v2 dokumentacji stany:Android Maps API wymaga OpenGL ES 2

Ponieważ wersja 2 API Map Google Android wymaga OpenGL ES wersji 2, należy dodać element <uses-feature> jako dziecko element w AndroidManifest.xml manifest:

<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true"/>` 

ten powiadamia usług zewnętrznych wymogu . W szczególności, ma efekt zapobiegania Google Sklep Play wyświetlanie aplikacji na urządzeniach, które nie obsługują wersji OpenGL ES 2.

w rzeczywistości, to rzuca exception jeśli nie jest to w manifeście . Nie chcę filtrować mojej aplikacji w sklepie, mam zamiar nadal korzystać ze starych map dla starych urządzeń i pokazywać nowe mapy tylko wtedy, gdy wymagane funkcje są obecne, wykrywane w czasie wykonywania, a nie przed instalacją.

Jak to zrobić? Czy musi to być coś w rodzaju wielokrotnego APKs z innym manifests?

+2

Po prostu android: required = "false". Wtedy nie powinno się go filtrować. – thaussma

+6

'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

+0

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. –

Odpowiedz

28

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.

+4

Ten problem jest śledzony tutaj: http://code.google.com/p/gmaps-api-issues/issues/detail?id=4699 Nie zapomnij zagrać w tę sprawę, mając nadzieję, że otrzyma zauważyłem. Od grudnia 2012 r. Jest tylko 7 głosów. –

2

ta jest stała i będzie zwolnić z następnej wersji Android Maps API jak wspomniano w issue #4699

1

miałem ten sam problem, rozejrzał się, a większość z sugerowanym obejście emulator nie działa dla mnie. Następnie znalazłem post sugerowany emulator Genymotion. Ten emulator obsługuje OpenGL ES w wersji 2. Jest także znacznie szybszy niż standardowy emulator.