在运行时检测硬件加速:Android

是否可以始终检测一个活动是否在创build时启用了硬件加速? 我担心我的图书馆的用户会通过清单来启用它,而不是为我的活动而禁用它(正如我指示他们那样做)。

我可以find唯一可靠的信息( http://android-developers.blogspot.com/2011/03/android-30-hardware-acceleration.html )说,我可以查询View.isHardwareAccelerated()Canvas.isHardwareAccelerated() 。 但是,为了我的目的,我想确保在我的图书馆的活动显示时closures。 到目前为止,我不能得到任何报告一致的是/否,当它打开或closures。 我试图在虚拟视图中进行黑客攻击,将其设置为我的活动,然后对其进行testing,但始终返回false。 另外,我试着testingWindow.getAttributes( ).flags ,但是它们也没有显示出来。

我正在testing这个,因为我的库的硬件加速绘制path无法正常工作,似乎没有任何方法可以解决这个问题。

Solutions Collecting From Web of "在运行时检测硬件加速:Android"

ActivityInfo flagsTry FLAG_HARDWARE_ACCELERATED ,这可以通过getActivityInfo()PackageManager获得。

我是Android的新手,所以我被困在上面的答案中提供的线索。去search周围,发现这个代码在谷海的某个地方。 希望它可以帮助别人。

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