2012-12-05 4 views
30

Les cartes des états de documentation v2 openGL:API Google Maps sur Android nécessite 2

Parce que la version 2 de l'API Android de Google Maps nécessite OpenGL ES version 2, vous devez ajouter un élément <uses-feature> comme un enfant de le manifest élément AndroidManifest.xml:

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

Cela indique les services externes de l'exigence . il a notamment pour effet d'empêcher Google Play Store d'afficher votre application sur les appareils qui ne prennent pas en charge OpenGL ES version 2.

En fait, il jette un exception si ce n'est pas dans le manifeste . Je ne souhaite pas filtrer mon application dans le magasin, je prévois de continuer à utiliser les anciennes cartes pour les anciens appareils, et afficher uniquement les nouvelles cartes si les fonctionnalités requises sont présentes, détectées lors de l'exécution plutôt qu'avant l'installation.

Alors, comment faire? Est-ce que ce doit être quelque chose comme plusieurs APKs avec différents manifests?

+2

Juste android: requis = "faux". Ensuite, il ne devrait pas être filtré. – thaussma

+6

'android: required =" false "' aboutit à '12-05 22: 18: 31.484: E/AndroidRuntime (9618): Causé par: java.lang.RuntimeException: L'API Google Maps Android supporte uniquement OpenGL ES 2.0 et plus. S'il vous plaît ajouter dans AndroidManifest.xml 'sur un Nexus S 4.1.2 – qubz

+0

Même question ici, si je supprime l'exigence du manifeste (ou set required = "false") MapFragment lève une exception sur un périphérique qui supporte OpenGL ES 2.0. C'est comme si MapFragment cherchait l'exigence dans la configuration du service d'activité plutôt que de vérifier si le périphérique lui-même prend en charge OpenGL ES 2.0. –

Répondre

28

Mise à jour finale

Au 20/12/2013, les Android Dashboard montre qu'environ 100% des appareils prennent désormais en charge OpenGL 2.0+ si cette réponse n'est plus pertinente. Vous pouvez simplement exiger OpenGL ES 2.0+ dans votre manifeste.

Mise à jour

Ceci est fixé au 7 tours du Google Play SDK des services add-on. Il est sûr d'utiliser <uses-feature android:glEsVersion="0x00020000" android:required="false"/> et detect OpenGL ES 2.0 at runtime.

réponse originale

Il semble que le Google Maps API Android v2 nécessite une déclaration <uses-feature android:glEsVersion="0x00020000" android:required="true/> explicite AndroidManifest.xml donc il n'y a aucun moyen de déployer Google Maps API Android services v2 sans exclure tous les périphériques 1.x OpenGL ES . Au moment où j'écris, Google's Android Dashboard montre que, parmi les appareils 1.1 et 2.0, 90.8% des appareils prennent en charge 2.0.

Sur un dispositif particulier (Motorola XOOM), ce code entraîne 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; 

Cependant, lorsqu'il n'y a pas de déclaration <uses-feature> dans le manifeste, MapFragment est de lancer une 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 

En espérant qu'une mise à jour de la bibliothèque Maps supprimera cette limitation afin que nous puissions déployer un seul fichier APK et utiliser des API d'exécution pour déterminer si vous souhaitez charger la nouvelle expérience Google Maps v2 ou revenir à un autre solution viable.

+4

Ce problème est suivi ici: http://code.google.com/p/gmaps-api-issues/issues/detail?id=4699 Ne pas oublier d'aborder le problème, dans l'espoir qu'il obtiendra remarqué. En décembre 2012, il n'y a que 7 votes. –

2

Ceci est fixe et sera mise en vente avec la prochaine version de l'API Google Maps Android comme mentionné dans issue #4699

1

J'ai eu le même problème, regarda autour de lui et la plupart de la solution proposée pour l'émulateur ne fonctionne pas pour moi. Ensuite, j'ai trouvé un poste où l'émulateur Genymotion a été suggéré. Cet émulateur prend en charge OpenGL ES version 2. Il est également beaucoup plus rapide que l'émulateur standard.