是否可以在创建活动时始终检测活动是否启用了硬件加速?我担心我的库的用户会在不应该通过清单时通过清单启用它,而不是专门为我的Activity禁用它(我指示他们这样做。)
我能找到的唯一可靠信息(http://android-developers.blogspot.com/2011/03/android-30-hardware-acceleration.html)表示我可以查询View.isHardwareAccelerated()
和Canvas.isHardwareAccelerated()
。但是,出于我的目的,我想确保在显示我的图书馆的活动时它已关闭。到目前为止,当打开或关闭时,我无法得到任何报告一致的是/否的信息。我尝试在虚拟视图中进行黑客攻击,将其设置为我的活动,然后对其进行测试,但它总是返回false。另外,我尝试过测试Window.getAttributes( ).flags
,但他们也没有显示它。
我正在测试这个,因为我的库的硬件加速绘制路径无法正常运行,似乎没有任何方法可以修复它。
答案 0 :(得分:6)
Try FLAG_HARDWARE_ACCELERATED
flags
位于ActivityInfo
的{{1}}活动中,PackageManager
来自getActivityInfo()
{{1}}。
答案 1 :(得分:6)
我是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;
}