2011-07-22 21 views
9

¿Es posible detectar de forma consistente si una actividad tiene habilitada la aceleración de hardware cuando se crea? Me preocupa que los usuarios de la biblioteca de mi permitirá que a través del manifiesto cuando no deberían, por no discapacitante específicamente para mi actividad (como yo Que hagan.)Detecta aceleración de hardware en tiempo de ejecución: Android

La única información sólida que pueda encontrar (http://android-developers.blogspot.com/2011/03/android-30-hardware-acceleration.html) dice que puedo consultar View.isHardwareAccelerated() y Canvas.isHardwareAccelerated(). Sin embargo, para mi propósito, me gustaría asegurarme de que esté apagado cuando se muestre la Actividad de mi biblioteca. Hasta el momento, no puedo obtener nada para informar un sí/no constante cuando está activado o desactivado. Intenté hackear una vista ficticia, configurarla para mi actividad y luego probarla, pero siempre devuelve falso. Además, traté de probar Window.getAttributes().flags, pero tampoco lo muestran.

Estoy probando esto porque la ruta de extracción acelerada por hardware para mi biblioteca no funciona correctamente, y no parece que haya ninguna forma de solucionarlo.

Respuesta

6

Try FLAG_HARDWARE_ACCELERATED en flags en ActivityInfo para la actividad, que se podrían obtener de PackageManager través getActivityInfo().

+0

¡Increíble! ¡Funciona, gracias un millón! – Jesse

+4

Otra forma de hacerlo es llamar a getDecorView(). IsHardwareAccelerated() desde el método onCreate() de la actividad. –

7

Soy nuevo en Android, así que estaba atascado incluso con las pistas dadas en la respuesta anterior. Fui a buscar y encontré este código en algún lugar del mar de Google. Espero que ayude a alguien.

/** 
* Returns true if the given Activity has hardware acceleration enabled 
* in its manifest, or in its foreground window. 
* 
* TODO(husky): Remove when initialize() is refactored (see TODO there) 
* TODO(dtrainor) This is still used by other classes. Make sure to pull some version of this 
* out before removing it. 
*/ 
public static boolean hasHardwareAcceleration(Activity activity) { 
    // Has HW acceleration been enabled manually in the current window? 
    Window window = activity.getWindow(); 
    if (window != null) { 
     if ((window.getAttributes().flags 
       & WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED) != 0) { 
      return true; 
     } 
    } 

    // Has HW acceleration been enabled in the manifest? 
    try { 
     ActivityInfo info = activity.getPackageManager().getActivityInfo(
       activity.getComponentName(), 0); 
     if ((info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0) { 
      return true; 
     } 
    } catch (PackageManager.NameNotFoundException e) { 
     Log.e("Chrome", "getActivityInfo(self) should not fail"); 
    } 

    return false; 
} 
+0

Hola, bruce. Responda también a la siguiente pregunta .. http://stackoverflow.com/questions/12481198/hardware-acceleration-supported-device-list – saa

Cuestiones relacionadas