Например мне нужно выдвинуть строку состояния (статусбар). Для этого есть метод expand в классе StatusBarManager. Как мне его вызвать? Я примерно понимаю так:
В корне проекта создать папку android, в ней папку app и в ней создать класс StatusBarManager с методом expand без тела.
package android.app.StatusBarManager;
public class StatusBarManager {
public void expand() {}
}
Затем в активности
StatusBarManager sbm = (StatusBarManager) getSystemService("statusbar");
sbm.expand();
Получится ли так добиться выдвигания статусбара? По идее скомпилируется класс и выполнится точь-в-точь как класс из фреймворка. Если так ничего не получится, то тогда каким образом выполняется обычный скомпилированный код, который поставляется в SDK? Что там находится? Почему выполняется код из фреймворка, а не из SDK?
Для этого есть метод expand в классе StatusBarManager. Как мне его вызвать?
С помощью рефлексии, например.
Вариант, предложенный Вами, упадет во время выполнения с ClassCastException.
Вы определяете класс StatusBarManager, далее Вы используете этот класс в классе активити (явно указывая, что этот класс необходимо импортировать из Вашего пакета).
Метод getSystemService("statusbar") возвращает объект класса StatusBarManager, и это не тот класс, который определили Вы, а системный.
Далее Вы пытаетесь явно преобразовать объект класса StatusBarManager (системный) к классу StatusBarManager, созданному Вами. Так как это преобразование невозможно, то будет сгенерировано исключение ClassCastException.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей