2012-02-08 15 views

Odpowiedz

33

Tak. Poniższy kod rade:

final ActivityManager activityManager = 
    (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
final ConfigurationInfo configurationInfo = 
    activityManager.getDeviceConfigurationInfo(); 
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000; 

przeczytać ten o więcej informacji: http://www.learnopengles.com/android-lesson-one-getting-started/

Możesz także wymagają chcą ograniczyć urządzeń, które nie obsługują 2,0 widząc swoją aplikację na rynku dodając do manifestu:

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

Zobacz także the doc of uses-feature.

+0

Funkcja getDeviceConfigurationInfo() zwraca wartość ConfigurationInfo, która zgodnie ze specyfikacją to: "Informacje, które można pobrać o preferencjach konfiguracji sprzętu zadeklarowanych przez aplikację. Odpowiada to informacjom zebranym z tagów i w AndroidManifest.xml. "Wygląda więc na to, że są to wymagania sprzętowe dodane do Twojej aplikacji, a nie informacje o urządzeniu. – jeroent

+0

@jeroent To właśnie określa klasa "ConfigurationInfo" w specyfikacji, ale użycie kontekstu "ACTIVITY_SERVICE" w "getSystemService" powoduje pobranie "ActivityManager" do interakcji z globalnym stanem systemu. – Foggzie

+0

Przepraszam? A jak sprawdzić, czy obsługa 3.0 –

2

Ustalenie rozszerzeń OpenGL:

Implementacje OpenGL różnić w zależności od urządzenia z systemem Android w kategoriach rozszerzeń do API OpenGL ES, które są obsługiwane. Rozszerzenia te obejmują kompresję tekstur, ale zazwyczaj obejmują także inne rozszerzenia zestawu funkcji OpenGL.

Aby określić tekstury formatów kompresji i inne rozszerzenia OpenGL, są obsługiwane w danym urządzeniu:

Uruchom poniższy kod na urządzeniach docelowych, aby określić co tekstury formaty kompresji są obsługiwane:

String extensions = javax.microedition.khronos.opengles.GL10.glGetString(GL10.GL_EXTENSIONS); 

Ostrzeżenie: wyniki tego połączenia różnią się w zależności od urządzenia! Musisz uruchomić to połączenie na kilku urządzeniach docelowych, aby określić, które typy kompresji są powszechnie obsługiwane. Przejrzyj dane wyjściowe tej metody, aby określić, jakie rozszerzenia OpenGL są obsługiwane w urządzeniu.

+1

Ta metoda jest zawiła. Jeśli zamierzasz użyć funkcji glGetString(), której nie nazwałbyś GL_EXTENSIONS, wywołasz ją za pomocą GL_VERSION, a następnie przeanalizujesz ciąg znaków. Klasa ConfigurationInfo została zaprojektowana, aby szybko i łatwo rozwiązać ten problem. – Foggzie

5

Oprócz sprawdzania w kodzie w sposób, który wspominają inni, jeśli chcesz restrct go na rynku tylko do tych urządzeń z 2,0 następnie w manifeście:

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

Powinieneś robić jedno i drugie. Kazałem ludziom instalować apk bezpośrednio na nieodpowiednich urządzeniach i musiałem radzić sobie z dziwnymi wyjątkami. Teraz rzucam Czas:

private boolean detectOpenGLES20() { 
     ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
     ConfigurationInfo info = am.getDeviceConfigurationInfo(); 
     return (info.reqGlEsVersion >= 0x20000); 
    } 

     //in activity onCreate  
    if (!detectOpenGLES20()) { 
     throw new RuntimeException("Open GL ES 2.0 was not found on device"); 
    } 
0

Ten kod działa poprawnie ..

 // 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; 

    if (supportsEs2) { 
     Log.i("JO", "configurationInfo.reqGlEsVersion:" 
       + configurationInfo.reqGlEsVersion + "supportsEs2:" 
       + supportsEs2); 
     // Request an OpenGL ES 2.0 compatible context. 
     myGlsurfaceView.setEGLContextClientVersion(2); 

     final DisplayMetrics displayMetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 

     // Set the renderer to our demo renderer, defined below. 
     myRenderer = new MyRenderer(this, myGlsurfaceView); 
      } else { 
     // This is where you could create an OpenGL ES 1.x compatible 
     // renderer if you wanted to support both ES 1 and ES 2. 
     return; 
    } 
0

Przez pewien czas szukałem dla tej samej odpowiedzi, zbyt. Ale niestety nie mogłem znaleźć odpowiedniego opisu. Właśnie znalazłem sposób przed chwilą sam i czuję, że chciałbym się nim podzielić z każdym.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    FeatureInfo[] list = this.getPackageManager() 
      .getSystemAvailableFeatures(); 

    Toast.makeText(this, 
      "OpenGL ES Version: " + list[list.length - 1].getGlEsVersion(), 
      Toast.LENGTH_LONG).show(); 
} 
2

Można użyć tego kodu w kodzie:

  int result; 
      ActivityManager activityManager = 
        (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
      ConfigurationInfo configInfo = activityManager.getDeviceConfigurationInfo(); 
      if (configInfo.reqGlEsVersion != ConfigurationInfo.GL_ES_VERSION_UNDEFINED) { 
       result= configInfo.reqGlEsVersion; 
      } else { 
       result= 1 << 16; // Lack of property means OpenGL ES version 1 
      } 

      Log.e("reqGlEsVersion", String.valueOf(result)); 
      Log.e("getGlEsVersion", configInfo.getGlEsVersion()); 
+0

to powinno być zaakceptowane jako odpowiedź – Bunny

Powiązane problemy