Подтвердить что ты не робот

API Android Maps требуется openGL es 2

Документация Maps v2 гласит:

Поскольку для версии 2 API Android для Google Maps требуется OpenGL ES версии 2, вы должны добавить элемент <uses-feature> в качестве дочернего элемента Элемент manifest в AndroidManifest.xml:

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

Уведомляет внешние службы требование. В частности, это предотвращает Google Play Store от отображения вашего приложения на устройствах, которые не поддерживают OpenGL ES версии 2.

Фактически, он выбрасывает exception, если это не в манифесте. Я не хочу фильтровать свое приложение в магазине, я планирую использовать старые карты для старых устройств и показывать только новые карты, если присутствуют необходимые функции, обнаруженные во время выполнения, а не перед установкой.

Итак, как мне это сделать? Должно ли это быть что-то вроде нескольких APKs с разными manifests?

4b9b3361

Ответ 1

Окончательное обновление

Начиная с 2013/12/20, Android Dashboard показывает, что примерно 100% устройств теперь поддерживают OpenGL 2.0+, поэтому этот ответ больше не актуальны. Вы можете просто потребовать OpenGL ES 2.0+ в своем манифесте.

Обновление

Это исправлено с версии 7 дополнения к SDK Служб Google Play. Безопасно использовать <uses-feature android:glEsVersion="0x00020000" android:required="false"/> и обнаруживать OpenGL ES 2.0 во время выполнения.

Оригинальный ответ

Похоже, что для Android API Android версии v2 требуется явное объявление <uses-feature android:glEsVersion="0x00020000" android:required="true/> в AndroidManifest.xml, поэтому нет возможности развернуть службы Google Maps Android API v2 без исключения всех устройств OpenGL ES 1.x. На момент написания этой статьи Google Android Dashboard показывает, что среди устройств с 1.1 и 2.0 90.8% устройств поддерживают 2.0.

На конкретном устройстве (Motorola XOOM) этот код приводит к 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;

Однако, когда в манифесте нет объявления <uses-feature>, MapFragment бросает исключение 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

Здесь, чтобы надеяться, что обновление библиотеки Maps устранит это ограничение, мы можем развернуть один APK и использовать API-интерфейсы времени выполнения, чтобы определить, загружать ли новый опыт Google Maps v2 или возвращаться к другому совместимому решению.

Ответ 2

Это исправлено и будет выпущено со следующей версией API карт Android, как указано в issue # 4699

Ответ 3

У меня была такая же проблема, огляделся, и большая часть предлагаемого обходного пути для эмулятора не работала для меня. Затем я нашел сообщение, в котором был предложен эмулятор Genymotion. Этот эмулятор поддерживает OpenGL ES версии 2. Он также намного быстрее, чем стандартный эмулятор.