Вызов частного (неопубликованного) метода в Android API - PullRequest
5 голосов
/ 16 мая 2011

Мне нужно проверить, какие BT-гарнитуры в настоящее время подключены (а не просто сопряжены) в OS 2.0 - 2.3. Такая функциональность не существует до API версии 11, где был представлен класс Bluetooth Headset. Но в предыдущих API уже существовал класс BluetoothHeadset, но он не был общедоступным. Вот документация к нему: http://www.kiwidoc.com/java/l/x/android/android/9/p/android.bluetooth/c/BluetoothHeadset. Итак, я пытался использовать рефлексию для вызова метода isConnected, но я довольно ужасен при рефлексии и получаю ошибку java.lang.IllegalArgumentException: object is not an instance of the class.

Я получил список сопряженных устройств, используя BluetoothDevice.getBondedDevices(), и я пытаюсь использовать метод isConnected() на каждом. Вот код:

public boolean isBtDevConnected(BluetoothDevice btDev){
    boolean connected  = false;
    try {
        Class<?> BTHeadset = Class.forName("android.bluetooth.BluetoothHeadset");
        Method isConnected = BTHeadset.getMethod("isConnected", new Class[] {BluetoothDevice.class});
                connected = isConnected.invoke(BTHeadset, new Object[] {btDev});
            }
        }
    } catch (Exception e) {
        WriteToLog(e);
    }
    return connected;
}

Я получаю исключение в строке, которая вызывает метод, но я не уверен, что делаю неправильно.

1 Ответ

0 голосов
/ 03 февраля 2013

BluetoothHeadset - это прокси-объект для управления службой гарнитуры Bluetooth через IPC.

Используйте getProfileProxy (Context, BluetoothProfile.ServiceListener, int), чтобы получить прокси-объект BluetoothHeadset.Используйте closeProfileProxy (int, BluetoothProfile), чтобы закрыть служебное соединение.

Android поддерживает одновременно только одну подключенную гарнитуру Bluetooth.Каждый метод защищен соответствующим разрешением.

источник: http://developer.android.com/reference/android/bluetooth/BluetoothHeadset.html

...