Обнаружение аппаратного ускорения во время выполнения: Android - PullRequest
9 голосов
/ 22 июля 2011

Можно ли последовательно определять, активировано ли в Activity действие «При ускорении» при создании?Я обеспокоен тем, что пользователи моей библиотеки могут включить ее через манифест, когда они не должны этого делать, не отключая ее специально для моей Активности (как я им приказываю).

Единственная достоверная информация, которую я могуfind (http://android -developers.blogspot.com / 2011/03 / android-30-hardware-acceleration.html ) говорит, что я могу запросить View.isHardwareAccelerated() и Canvas.isHardwareAccelerated().Однако для моих целей я хотел бы убедиться, что он отключен, когда отображается активность моей библиотеки.До сих пор я не могу получить ничего, чтобы сообщать о последовательном да / нет, когда он включен или выключен.Я пытался взломать в фиктивном виде, настроить его на свою активность, а затем протестировать его, но он всегда возвращает false.Кроме того, я попытался протестировать Window.getAttributes( ).flags, но они также не показывают его.

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

Ответы [ 2 ]

6 голосов
/ 03 сентября 2013

Я новичок в Android, поэтому застрял даже с подсказками, приведенными в ответе выше ... пошел искать и нашел этот код где-то в море Google.Надеюсь, это кому-нибудь поможет.

/**
 * 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;
}
6 голосов
/ 22 июля 2011

Try FLAG_HARDWARE_ACCELERATED в flags в ActivityInfo для действия, которое вы получите от PackageManager через getActivityInfo().

...