Вызов метода из системной службы - PullRequest
0 голосов
/ 14 января 2019

В 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()

чтобы получить реальную ссылку на работающий сервис, но ни один из них не работал для меня, так как класс не является статическим, и я не могу найти способ получить его экземпляр.

Существует ли надежный способ вызова нестатического метода из системной службы не по умолчанию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...