Мне нужно проверить, была ли функция наложения установлена на экземпляр ActionBarCompat
. Метод getWindow().hasFeature()
доступен только для API 11 и выше.
Как проверить функцию на API <11?
EDIT: на основе комментария метод getFeatures
должен быть доступен из API 1, но это защищенная область, и мне нужно получить доступ к этой функции из другого класса. Метод hasFeature
, с которым мне нужно использовать, с другой стороны, это только API 11 и выше. Это то, что Android Studio показывает мне, и приложение падает на устройстве 2.3.3.
FYI, класс активности, используемый здесь, представляет собой настраиваемый класс, который расширяет ActionBarActivity
из библиотеки ActionBarCompat. Не знаю, должно ли это иметь значение.
Вы можете использовать private
методы, используя API Reflection.
boolean hasFeature(int feature) {
Window window = getWindow(); //get the window instance.
if (android.os.Build.VERSION.SDK_INT >= 11) { // if we are running api level 11 and later
return window.hasFeature(feature); //call hasFeature
} else {
try {
Class c = window.getClass();
Method getFeatures = c.getDeclaredMethod("getFeatures");//get the getFeatures method using reflection
getFeatures.setAccessible(true);//make it public
Integer features = getFeatures.invoke(window, null); //invoke it
return (features.intValue() & (1 << feature)) != 0; //check if we have the feature and return the result.
} catch (Exception e) {
return false;//in case invocation fails with any reason
}
}
}
Вы пробовали использовать библиотеку поддержки.
Панель действий введена в Android 3.0 (уровень API 11), но если вы хотите, чтобы ваше приложение также поддерживало панель действий в более старых версиях, используйте библиотеку поддержки, чтобы она совместима со старыми версиями (Android 2.1 и выше)