配备 Wear OS 3 / Android 11 的 Fossil Gen 6 上不显示 CompanionDeviceManager 蓝牙对话

问题描述 投票:0回答:1

我有两个应用程序,它们的代码库非常相似,在移动设备(Android 13 / API 33)和穿戴设备(Android 11 / API级别30)上运行良好,使用旧式蓝牙连接程序。 当尝试在 Playstore 上发布时,我被要求重新设计此过程以使用 CompanionDeviceManager 来减少请求的权限数量。移动应用程序的返工相当简单,该应用程序与 CompanionDeviceManager 再次正常工作。 不过,穿戴应用程序给我带来了相当困难,CompanionDeviceManager 蓝牙对话框不显示。

我一直在浏览、阅读和尝试,但我尝试过的所有代码和权限组合都以 CompanionDeviceManager.associate 调用 checkFeaturePresent 结束,尽管相应的权限是,但它返回 false 并带有调试输出“Feature PackageManager.FEATURE_COMPANION_DEVICE_SETUP 不可用”添加到清单文件中。 taget 设备是 Fossil Gen 6 智能手表。 我需要连接的设备是 BLE 设备,但我认为这并不重要。

我在这里有点绝望,所以非常感谢任何指点!

清单中的权限(并非所有这些都是必需的):

    <uses-feature
        android:name="android.hardware.type.watch"
        android:required="true" />

    <uses-feature
        android:name="android.software.companion_device_setup"
        android:required="true" />

    <uses-permission android:name="android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND" />
    <uses-permission android:name="android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND" />
    <uses-permission android:name="android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND" />

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

应该触发 CompanionDeviceManager 对话的 Activity 代码:

    @SuppressLint("MissingPermission")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_ble_bond_cdm_activity)

        val deviceFilter: BluetoothLeDeviceFilter = BluetoothLeDeviceFilter.Builder()
            .setNamePattern(Pattern.compile("${MainActivity.productName}_\\d+"))
            .build()

        val pairingRequest: AssociationRequest = AssociationRequest.Builder()
            .addDeviceFilter(deviceFilter)
            .setSingleDevice(false)
            .build()

        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?) {
                    MainActivity.setSensorDevice(null)
                }
            }, null
        )
    } // onCreate


    @SuppressLint("MissingPermission")
    override fun onActivityResult(
        requestCode: Int,
        resultCode: Int,
        data: Intent?
    ) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {
            SELECT_DEVICE_REQUEST_CODE -> {
                when (resultCode) {
                    Activity.RESULT_OK -> {
                        val scanResult: ScanResult? = data?.getParcelableExtra(
                            CompanionDeviceManager.EXTRA_DEVICE
                        )
                        // The user chose to pair the app with a Bluetooth device.
                        if (scanResult != null) {
                            MainActivity.setSensorDevice(scanResult.device)
                        } else {
                            MainActivity.setSensorDevice(null)
                        }
                    }

                    else -> {
                        MainActivity.setSensorDevice(null)
                    }
                }
            }

            else -> {
                MainActivity.setSensorDevice(null)
            }
        }

        finish()
    } // onActivityResult
android bluetooth-lowenergy wear-os android-bluetooth android-companion-device
1个回答
0
投票

您的第三方穿戴应用不应该调用 CompanionDeviceManager.associate,调用将会失败,并且不会提示 UI 对话框,因为 WearOS 上不存在 CompanionDeviceManager UI 包。

此外,3p 应用程序根本不需要在您的手表上创建关联。通常只有配套应用程序(例如 Fossil Gen 6 配套应用程序)需要使用 CompanionDeviceManager。

© www.soinside.com 2019 - 2024. All rights reserved.