2012-07-04 3 views
4

Чтобы динамически перетащить вниз область уведомлений в Android, единственное решение этоПочему я не могу найти ссылку на класс StatusBarManager напрямую?

Object sbservice = getSystemService("statusbar"); 
    Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); 
    Method showsb = statusbarManager.getMethod("expand"); 
    showsb.invoke(sbservice); 

Это прекрасно работает, но почему гадость с отражением? Почему я не могу найти ссылку на класс StatusBarManager напрямую? Почему в классе Context для службы «statusbar» нет константы?

ответ

12

Почему гадость с отражением?

Потому что это не часть Android SDK. Только люди, заинтересованные в создании ненадежных приложений, будут пытаться взаимодействовать с StatusBarManager вне исходного кода Android, так как основные разработчики Android и устройства могут менять что-либо за пределами SDK, когда захотят.

Почему я не могу найти ссылку на класс StatusBarManager напрямую?

Потому что это не часть Android SDK. Есть очень много классов и методов в Android каркасных классов, которые отмечены с @hide аннотацию, по разным причинам: нежелание взять на себя обязательство поддерживать API на неопределенный срок, «безопасность через маскировку» и т.д.

Почему не существует ли константа в классе Context для службы «statusbar»?

Потому что это не часть Android SDK. Разумеется, вы можете предоставить исправления для AOSP, чтобы StatusBarManager был «продвинут» на тот же статус, что и другие системные службы (например, LocationManager, NotificationManager). Если ситуация StatusBarManager является просто надзором после того, как SDK был создан в 2007 году, ваши исправления могут быть приняты, и вы увидите изменение в предстоящей версии Android.

Смежные вопросы