2012-02-08 5 views

risposta

33

Sì. Il seguente codice farà il trucco:

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

Leggi questo per ulteriori informazioni: http://www.learnopengles.com/android-lesson-one-getting-started/

Si possono anche richiedere voler limitare i dispositivi che non supportano 2.0 di vedere la vostra applicazione nel mercato con l'aggiunta di il seguente al manifest:

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

Vedere anche the doc of uses-feature.

+0

getDeviceConfigurationInfo() restituisce un ConfigurationInfo, che in base alle specifiche è: "Informazioni che è possibile recuperare sulle preferenze di configurazione hardware dichiarate da un'applicazione. Ciò corrisponde alle informazioni raccolte dai tag e di AndroidManifest.xml. "Sembra quindi che questi siano i requisiti del dispositivo che hai aggiunto alla tua app anziché essere informazioni sul dispositivo. – jeroent

+0

@jeroent Questo è ciò che la classe 'ConfigurationInfo' afferma nelle sue specifiche ma utilizzando il contesto 'ACTIVITY_SERVICE' in 'getSystemService' recupera un 'ActivityManager' per interagire con lo stato globale del sistema. – Foggzie

+0

Scusami? E come verificare se supporto 3.0 –

2

Determinazione estensioni OpenGL:

implementazioni di OpenGL variano da dispositivo Android in termini di estensioni alle API OpenGL ES supportati. Queste estensioni includono le compressioni texture, ma in genere includono anche altre estensioni del set di funzionalità OpenGL.

per determinare quali formati di compressione, e altre estensioni OpenGL tessitura, sono supportati su un particolare dispositivo:

Eseguire il seguente codice sui vostri dispositivi di destinazione per determinare quali formati di compressione delle texture sono supportati:

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

Avvertenza: i risultati di questa chiamata variano in base al dispositivo! È necessario eseguire questa chiamata su diversi dispositivi di destinazione per determinare quali tipi di compressione sono comunemente supportati. Rivedere l'output di questo metodo per determinare quali estensioni OpenGL sono supportate sul dispositivo.

+1

Questo metodo è contorto. Se hai intenzione di usare glGetString() non lo chiameresti con GL_EXTENSIONS, lo chiameresti con GL_VERSION e poi analizzerò la stringa in seguito. La classe ConfigurationInfo è progettata per risolvere questo problema rapidamente e facilmente. – Foggzie

5

Oltre a controllare nel codice nei modi che altri hanno detto, se si vuole restrct nel mercato solo a quei dispositivi con 2.0 quindi a manifestarsi:

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

Si dovrebbe fare entrambe le cose, ho avuto persone che installano l'apk direttamente su dispositivi non adatti e hanno dovuto fare i conti con strane eccezioni. Ora mi butto un runtime:

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

Questo codice funziona bene ..

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

Per un po ', ho cercato per la stessa risposta, anche. Ma sfortunatamente, non sono riuscito a trovare una descrizione adeguata per questo. Ho appena trovato un modo un minuto fa da solo, e mi sento come se mi piacerebbe condividerlo con tutti.

@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

È possibile utilizzare questo codice nel codice:

  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

questo dovrebbe essere accettato come risposta – Bunny