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.
Example
// 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();