2011-07-22 23 views
9

Czy możliwe jest konsekwentne wykrywanie, czy w działaniu zostało włączone przyspieszenie sprzętowe podczas jego tworzenia? Obawiam się, że użytkownicy mojej biblioteki włączą go za pośrednictwem manifestu, kiedy nie powinni, przez nie wyłączenie go specjalnie dla mojej aktywności (jak nakazuję im to zrobić).Wykryj przyspieszenie sprzętowe w środowisku wykonawczym: Android

Jedyne solidne informacje jakie mogę znaleźć (http://android-developers.blogspot.com/2011/03/android-30-hardware-acceleration.html) mówi, że mogę zapytać View.isHardwareAccelerated() i Canvas.isHardwareAccelerated(). Jednak dla moich celów chciałbym upewnić się, że jest wyłączony, gdy wyświetlana jest aktywność mojej biblioteki. Do tej pory nie mogę uzyskać niczego, co mogłoby potwierdzić spójne tak/nie, gdy jest włączone lub wyłączone. Próbowałem hakować w widoku sztucznym, ustawiając go na moją aktywność, a następnie testując, ale zawsze zwraca wartość false. Próbowałem też testować Window.getAttributes().flags, ale one też tego nie pokazują.

Testuję to, ponieważ sprzętowa akcelerowana ścieżka rysowania dla mojej biblioteki nie działa poprawnie i nie wydaje się, że jest jakikolwiek sposób, aby to naprawić.

Odpowiedz

6

Try FLAG_HARDWARE_ACCELERATED w flags w ActivityInfo za działanie, które można uzyskać od PackageManager przez getActivityInfo().

+0

Niesamowite! Działa, dzięki milionowi! – Jesse

+4

Innym sposobem na to jest wywołanie metody getDecorView(). IsHardwareAccelerated() z metody onCreate() działania. –

7

Jestem nowy w systemie Android, więc utknąłem nawet ze wskazówkami podanymi w odpowiedzi powyżej. Poszedłem do wyszukiwania i znalazłem ten kod gdzieś w morzu Google. Mam nadzieję, że to komuś pomaga.

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

Cześć bruce .. proszę odpowiedzieć na następujące pytanie także .. http://stackoverflow.com/questions/12481198/hardware-acceleration-supported-device-list – saa

Powiązane problemy