2012-12-05 3 views
30

I Maps v2 documentazione afferma:Android Maps API richiede OpenGL ES 2

Perché la versione 2 della API di Google Maps Android richiede OpenGL ES versione 2, è necessario aggiungere un elemento <uses-feature> come figlio di l'elemento manifest in AndroidManifest.xml:

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

Questa notifica servizi esterni del requisito . In particolare, esso ha l'effetto di impedire Google Play Store di visualizzare la vostra applicazione su dispositivi che non supportano la versione OpenGL ES 2.

In realtà, si getta un exception se questo non è nel manifesto . Non voglio filtrare la mia app nello store, ho intenzione di continuare a utilizzare le vecchie mappe per i vecchi dispositivi e di mostrare solo le nuove mappe se sono presenti le funzionalità richieste, rilevate in fase di esecuzione piuttosto che prima dell'installazione.

Quindi come faccio? Deve essere qualcosa come più APKs con diverso manifests?

+2

Just android: required = "false". Quindi non dovrebbe essere filtrato. – thaussma

+6

'android: required =" false "' restituisce '12-05 22: 18: 31.484: E/AndroidRuntime (9618): Causato da: java.lang.RuntimeException: l'API di Google Maps per Android supporta solo OpenGL ES 2.0 e successive. Si prega di aggiungere in AndroidManifest.xml 'su un Nexus S 4.1.2 – qubz

+0

Lo stesso problema qui, se rimuovo il requisito dal manifest (o set required = "false") MapFragment genera un'eccezione su un dispositivo che supporta OpenGL ES 2.0. È come se MapFragment stia cercando il requisito nella configurazione del servizio attività piuttosto che controllare se il dispositivo stesso supporta OpenGL ES 2.0. –

risposta

28

aggiornamento finale

A partire dal 2013/12/20, i Android Dashboard mostra che circa il 100% dei dispositivi ora supporto OpenGL 2.0+ quindi questa risposta non è più rilevante. Potresti semplicemente richiedere OpenGL ES 2.0+ nel tuo manifest.

Aggiornamento

Questa è fissato come di giri 7 del Google Play Services SDK add-on. È sicuro usare <uses-feature android:glEsVersion="0x00020000" android:required="false"/> e detect OpenGL ES 2.0 at runtime.

risposta originale

Sembra che l'API v2 di Google Maps Android richiede un esplicito <uses-feature android:glEsVersion="0x00020000" android:required="true/> dichiarazione AndroidManifest.xml quindi non c'è alcun modo per distribuire Google Maps Android servizi API v2 senza escludere tutti i dispositivi 1.x OpenGL ES . Al momento della stesura di questo documento, Google's Android Dashboard mostra che, tra i dispositivi 1.1 e 2.0, il 90.8% dei dispositivi supporta 2.0.

su un particolare dispositivo (Motorola XOOM), questo codice si traduce in 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; 

Tuttavia, quando non c'è <uses-feature> dichiarazione nel manifesto, MapFragment sta gettando un 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 

Ecco perché sperare che un aggiornamento della libreria di Maps rimuova questa limitazione in modo che possiamo implementare un singolo APK e utilizzare le API di runtime per determinare se caricare o meno la nuova esperienza di Google Maps v2 o ricorrere a un altro compat soluzione

+4

Questo problema è tracciato qui: http://code.google.com/p/gmaps-api-issues/issues/detail?id=4699 Non dimenticare di iniziare il problema, nella speranza che otterrà si accorse. A partire dal dicembre 2012, ci sono solo 7 voti. –

2

Questo è fisso e sarà comunicato con la prossima versione di Android Maps API di cui al issue #4699

1

Ho avuto lo stesso problema, si guardò intorno e la maggior parte della soluzione suggerita per l'emulatore non ha funzionato per me. Poi ho trovato un post in cui è stato suggerito l'emulatore Genymotion. Questo emulatore supporta OpenGL ES versione 2. È anche molto più veloce dell'emulatore standard.