Как вы используете класс BluetoothA2dp в Xamarin
Я пытаюсь контролировать соединение Bluetooth с устройством, используя профиль A2DP. В нативной разработке Java для Android разработчики используют класс BluetoothA2dp для установления соединения.
В Xamarin есть такой же класс - BluetoothA2dp. Но я не могу понять, как инициализировать его экземпляр, так как у него нет конструктора.
Как я могу создать соединение с помощью порта этого класса?
2 ответа
Вам не нужно использовать класс BluetoothA2dp напрямую. Согласно документации Android...
BluetoothA2dp - это прокси-объект для управления службой Bluetooth A2DP через IPC. Используйте getProfileProxy(Context, BluetoothProfile.ServiceListener, int), чтобы получить прокси-объект BluetoothA2dp.
Вы должны использовать BluetoothAdapter.GetProfileProxy
инициировать соединение с прокси-объектом A2DP.
BluetoothAdapter.DefaultAdapter.GetProfileProxy(this, serviceListener, ProfileType.A2dp);
serviceListener
аргумент в вызове метода выше должен быть экземпляром класса, который реализует IBluetoothProfileServiceListener
, в котором вы можете получить доступ к объекту прокси через метод OnServiceConnected.
public void OnServiceConnected(ProfileType profile, IBluetoothProfile proxy)
{
}
Класс "BluetoothA2DP" был предоставлен в Xamarin версии 5.0 до 5.2, см. Ссылку
Поскольку "BluetoothA2DP" является закрытым классом, он не может быть унаследован. Вы можете использовать его только через его экземпляры.
Вам необходимо переопределить его методы "GetConnectionState" или "GetDevicesMatchingConnectionStates" для подключения определенного устройства.
Вероятно, лучшее, что вы можете сделать, это попытаться расширить функциональность "BluetoothA2DP", используя собственный метод расширения.
Предположим, что ваш класс BluetoothA2DP выглядит следующим образом:
public sealed class BluetoothA2dp : Java.Lang.Object, IBluetoothProfile, IDisposable {
public ProfileState GetConnectionState (BluetoothDevice device) {
return some_device_configs;
}
}
Тогда ваш собственный класс, который расширяет функциональность класса "BluetoothA2DP" как:
public static class MyClassExtender
{
public static void ExtendedTest(this BluetoothA2DP instance)
{
instance.GetConnectionState();
}
}
Затем используйте метод ExtendedTest() для использования класса "BluetoothA2DP".
Надеюсь, что это должно работать:)
Вы можете обратиться сюда для получения полной документации по API.