Penyambungan perangkat pendamping

Pada perangkat yang menjalankan Android 8.0 (API level 26) dan yang lebih tinggi, Anda dapat menyesuaikan dialog permintaan penyambungan saat mencoba menyambungkan dengan perangkat pendamping melalui Bluetooth, BLE, dan Wi-Fi.

Di aplikasi, Anda dapat menentukan apakah pengguna melihat daftar kemungkinan perangkat pendamping atau hanya satu saran untuk perangkat pendamping. Anda juga dapat memfilter item yang muncul di dialog permintaan penyambungan, seperti berdasarkan jenisnya (Bluetooth, BLE, dan Wi-Fi) atau berdasarkan nama perangkat.

Cuplikan kode berikut menunjukkan cara menampilkan dialog yang meminta apakah pengguna ingin menyambungkan perangkat genggam dengan satu perangkat pendamping yang terhubung melalui Bluetooth bernama "Perangkat saya":

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.
            }
        }
    }