Question

I am trying to controll Bluetooth connection to a device using the A2DP profile. In native Java Development for Android, devs make use of BluetoothA2dp class to make a connection.

There is a class called the same in Xamarin - BluetoothA2dp. But I can't seem to understand how to initialize an instance of it, since it has no constructor.

How can I create a connection with the help of that class port?

Was it helpful?

Solution

You don't need to use the BluetoothA2dp class directly. As per the Android documentation...

BluetoothA2dp is a proxy object for controlling the Bluetooth A2DP Service via IPC. Use getProfileProxy(Context, BluetoothProfile.ServiceListener, int) to get the BluetoothA2dp proxy object.

You should use BluetoothAdapter.GetProfileProxy to initiate a connection to the A2DP proxy object.

BluetoothAdapter.DefaultAdapter.GetProfileProxy(this, serviceListener, ProfileType.A2dp);

The serviceListener argument in the method call above needs to be an instance of a class which implements IBluetoothProfileServiceListener, in which you can then access the proxy object through the OnServiceConnected method.

public void OnServiceConnected(ProfileType profile, IBluetoothProfile proxy)
{

}

OTHER TIPS

The class "BluetoothA2DP" has been provided in Xamarin version 5.0 to 5.2, refer to link

Since "BluetoothA2DP" is sealed class, it cannot be inherited. You can only used it through its instances.

You need to override its "GetConnectionState" or "GetDevicesMatchingConnectionStates" methods to connect particular device.

Probably, the best you can do is try to extend the functionality of "BluetoothA2DP" using your own extension method.

Suppose your "BluetoothA2DP" class be like :

public sealed class BluetoothA2dp : Java.Lang.Object,   IBluetoothProfile, IDisposable {
    public ProfileState GetConnectionState (BluetoothDevice device)  {
        return some_device_configs;
    }
}

Then your own class that extends "BluetoothA2DP" class functionality as :

public static class MyClassExtender
{
    public static void ExtendedTest(this BluetoothA2DP instance)
    {
        instance.GetConnectionState();        
    }
}

Then use ExtendedTest() method to utilize "BluetoothA2DP" class.

Hope this should work :)

You can refer here for full API Docs.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top