When there are several suitable remote devices, you can want to prompt the user to pick the one to which a connection should be made. A dialog to do this is supplied. Note that the dialog is not provided by a standard dialog class as this would require a Bluetooth client to have its own UI, and for this to be brought to the foreground. Instead, clients request a background thread called the notifier server to create the dialog: the server can put a dialog over the UI of whatever application happens to have the foreground.
To use the dialog:
Create an RNotifier
object, and connect it with RNotifier::Connect()
Call RNotifier::StartNotifierAndGetResponse()
passing in:
the UID of the authorisation plug-in (KDeviceSelectionNotifierUid
)
the device and/or service classes by which to filter suitable remote devices; these are packaged in a TBTDeviceSelectionParamsPckg
a Bluetooth address object that on completion of the dialog will hold information about the device the user selected in a packaged TBTDeviceResponseParams
.
When the StartNotifierAndGetResponse()
calls completes, extract the device information returned from its buffer.
Clean up by cancelling and closing the notifier.
// 1. Create a notifier
RNotifier not;
User::LeaveIfError(not.Connect());
// 2. Start the device selection plug-in
TBTDeviceSelectionParams selectionFilter;
TUUID targetServiceClass(0x2345);
selectionFilter.SetUUID(targetServiceClass);
TBTDeviceSelectionParamsPckg pckg(selectionFilter);
TBTDeviceResponseParams result;
TBTDeviceResponseParamsPckg resultPckg(result);
TRequestStatus status;
not.StartNotifierAndGetResponse(status, KDeviceSelectionNotifierUid, pckg, resultPckg);
User::After(2000000);
// 3. Extract device name if it was returned
User::WaitForRequest(status);
TPtrC name;
if (status.Int() == KErrNone)
{
if (resultPckg.IsValidDeviceName())
{
name.Set(resultPckg().DeviceName());
}
}
// 4. Clean up
not.CancelNotifier(KDeviceSelectionNotifierUid);
not.Close();