Отражение проблемы класса Android BluetoothService - PullRequest
0 голосов
/ 14 октября 2011

Я хочу вызвать некоторые методы, такие как isEnabled (), getAddressFromObjectPath () и т. Д. Класса BluetoothService, но этот класс помечен @ hide.

Я знаю, что у меня есть два возможных способа сделать то, что я хочу, один - удалить @hide, а другой - использовать отражение. Я решил использовать второй.

На примере исходного кода я обнаружил, что

    Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
    IBinder b = (IBinder) method.invoke(null, "bluetooth");

    if (b == null) {
        throw new RuntimeException("Bluetooth service not available");
    }

    IBluetooth mBluetoothService = IBluetooth.Stub.asInterface(b);

Однако он получает IBluetooth, а не BluetoothService, хотя BluetoothService действительно расширяет IBluetooth.Stub.

Итак, мои вопросы таковы:

(1) Могу ли я получить класс BluetoothService путем отражения, как в предыдущем примере кода? (2) Если мой первый вопрос отрицательный, я вызываю getAddressFromObjectPath () напрямую методом отражения, как показано ниже

    Method method = Class.forName("android.server.BluetoothService").getMethod("getAddressFromObjectPath", String.class);
    String b = (String) method.invoke(???, PATH);

какую дозу объекта мне нужно заполнить в методе invoke (), BluetoothService ???

Любое предложение будет с благодарностью !!!

1 Ответ

1 голос
/ 19 октября 2011

После опроса в интернете я получил ответ.Если я хочу вызвать нестатический метод, мне нужно сначала получить класс и конструктор.Используйте конструктор для создания экземпляра, и тогда я смогу вызвать нестатический метод для этого экземпляра.Тем не менее, я не мог сделать это в классе BluetoothService, потому что, если я снова сделаю конструктор, это вызовет много проблем!Я решил изменить IBluetooth.aidl, чтобы добавить нужные мне методы, потому что BluetoothService расширяет IBluetooth.Если бы я мог получить экземпляр IBluetooth, я бы вызвал нужные мне методы.Возможно, это не очень хорошее решение, но я думаю, что оно сработает.

Большое спасибо.

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