En dispositivos con Android 8.0 (API nivel 26) y versiones posteriores, puedes personalizar el diálogo de solicitud de sincronización cuando intentes sincronizar dispositivos complementarios mediante Bluetooth, BLE y Wi-Fi.
En tu app, puedes especificar si deseas que los usuarios vean una lista de posibles dispositivos complementarios o solo una sugerencia de uno de ellos. También puedes filtrar los elementos que aparecen en el diálogo de solicitud de sincronización, por ejemplo, por tipo (Bluetooth, BLE y Wi-Fi) o por nombre del dispositivo.
En el siguiente fragmento de código, se indica cómo mostrar un diálogo donde se pregunta si el usuario desea sincronizar un dispositivo portátil con un único dispositivo complementario conectado por Bluetooth llamado "Mi dispositivo":
Kotlin
class MyDeviceSelectionActivity : Activity() { private val deviceManager: CompanionDeviceManager by lazy(LazyThreadSafetyMode.NONE) { getSystemService(CompanionDeviceManager::class.java) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... // To skip filtering based on name and supported feature flags (UUIDs), // don't include calls to setNamePattern() and addServiceUuid(), // respectively. This example uses Bluetooth. val deviceFilter: BluetoothDeviceFilter = BluetoothDeviceFilter.Builder() .setNamePattern(Pattern.compile("My device")) .addServiceUuid(ParcelUuid(UUID(0x123abcL, -1L)), null) .build() // The argument provided in setSingleDevice() determines whether a single // device name or a list of device names is presented to the user as // pairing options. val pairingRequest: AssociationRequest = AssociationRequest.Builder() .addDeviceFilter(deviceFilter) .setSingleDevice(true) .build() // When the app tries to pair with the Bluetooth device, show the // appropriate pairing request dialog to the user. deviceManager.associate(pairingRequest, object : CompanionDeviceManager.Callback() { override fun onDeviceFound(chooserLauncher: IntentSender) { startIntentSenderForResult(chooserLauncher, SELECT_DEVICE_REQUEST_CODE, null, 0, 0, 0) } override fun onFailure(error: CharSequence?) { // Handle failure } }, null) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { when (requestCode) { SELECT_DEVICE_REQUEST_CODE -> when(resultCode) { Activity.RESULT_OK -> { // User has chosen to pair with the Bluetooth device. val deviceToPair: BluetoothDevice = data.getParcelableExtra(CompanionDeviceManager.EXTRA_DEVICE) deviceToPair.createBond() // ... Continue interacting with the paired device. } } } } }
Java
public class MyDeviceSelectionActivity extends Activity { private CompanionDeviceManager deviceManager; private AssociationRequest pairingRequest; private BluetoothDeviceFilter deviceFilter; private static final int SELECT_DEVICE_REQUEST_CODE = 42; @override public void onCreate() { // ... deviceManager = getSystemService(CompanionDeviceManager.class); // To skip filtering based on name and supported feature flags (UUIDs), // don't include calls to setNamePattern() and addServiceUuid(), // respectively. This example uses Bluetooth. deviceFilter = new BluetoothDeviceFilter.Builder() .setNamePattern(Pattern.compile("My device"), null) .addServiceUuid(new ParcelUuid(new UUID(0x123abcL, -1L))) .build(); // The argument provided in setSingleDevice() determines whether a single // device name or a list of device names is presented to the user as // pairing options. pairingRequest = new AssociationRequest.Builder() .addDeviceFilter(deviceFilter) .setSingleDevice(true) .build(); // When the app tries to pair with the Bluetooth device, show the // appropriate pairing request dialog to the user. deviceManager.associate(pairingRequest, new CompanionDeviceManager.Callback() { @Override public void onDeviceFound(IntentSender chooserLauncher) { startIntentSenderForResult(chooserLauncher, SELECT_DEVICE_REQUEST_CODE, null, 0, 0, 0); } }, null); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SELECT_DEVICE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { // User has chosen to pair with the Bluetooth device. BluetoothDevice deviceToPair = data.getParcelableExtra(CompanionDeviceManager.EXTRA_DEVICE); deviceToPair.createBond(); // ... Continue interacting with the paired device. } } }