В Android есть системные и пользовательские службы, на которые нельзя ссылаться из Android Studio. Допустим, я хочу вызвать метод getFlashLockState () из службы PersistentDataBlockManager. Подход по умолчанию - добавить сервисную ссылку.
import android.service.persistentdata.PersistentDataBlockManager;
Запись следующей строки в коде приведет к ошибке: Android Studio не может разрешить символ «PersistentDataBlockManager», по умолчанию
android.service. *
не содержит ссылку на службу persistentdata. Я попытался использовать отражение, чтобы получить класс по имени, и смог получить ссылку, подобную этой:
Class<?> referenceClass = Class.forName("android.service.persistentdata.PersistentDataBlockManager");
Object referenceObject = referenceClass.newInstance();
Но создание экземпляра объекта привело к ошибке: у класса нет конструктора с нулевым аргументом. После проверки его исходного кода я обнаружил, что его единственный конструктор выглядит так:
public PersistentDataBlockManager(IPersistentDataBlockService service)
По сути, оказалось, что это всего лишь оболочка, которая принимает фактическую реализацию класса из системной библиотеки. Я также попытался использовать другие виды отражений, такие как:
context.getSystemService()
чтобы получить реальную ссылку на работающий сервис, но ни один из них не работал для меня, так как класс не является статическим, и я не могу найти способ получить его экземпляр.
Существует ли надежный способ вызова нестатического метода из системной службы не по умолчанию?