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
fonte
2012-12-05 17:42:31
Just android: required = "false". Quindi non dovrebbe essere filtrato. – thaussma
'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
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. –