【问题标题】:CompanionDeviceService gets destroyed right after creationCompanionDeviceService 在创建后立即被销毁
【发布时间】:2022-11-13 11:45:43
【问题描述】:

我有一个简单的活动,其功能在调用时会显示配对请求。用户确认后,调用 startObservingDevicePresence("Some Mac address")。这成功触发了 CompanionDeviceService,我看到该设备出现在范围内的日志,但紧接着 onDestroy 被调用。应用程序继续运行并且日志中没有错误。有没有人成功使用过这些新的 android 12 api (https://developer.android.com/guide/topics/connectivity/companion-device-pairing#keep-awake)?

主要活动:

    public class MainActivity extends ReactActivity {
        private static final int SELECT_DEVICE_REQUEST_CODE = 42;
        private static CompanionDeviceManager deviceManager;
        private static AssociationRequest pairingRequest;
        private static BluetoothDeviceFilter deviceFilter;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(null);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                deviceManager = getSystemService(CompanionDeviceManager.class);
            }
        }

        public void start() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                deviceFilter = new BluetoothDeviceFilter.Builder()
                        .build();

                pairingRequest = new AssociationRequest.Builder()
                        .addDeviceFilter(deviceFilter)
                        .build();

                deviceManager.associate(pairingRequest,
                        new CompanionDeviceManager.Callback() {
                            @Override
                            public void onDeviceFound(IntentSender chooserLauncher) {
                                try {
                                    startIntentSenderForResult(chooserLauncher,
                                            SELECT_DEVICE_REQUEST_CODE, null, 0, 0, 0);
                                } catch (IntentSender.SendIntentException e) {
                                    e.printStackTrace();
                                }
                            }

                            @Override
                            public void onFailure(CharSequence charSequence) {

                            }
                        },
                        null);

            }
        }

        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == Activity.RESULT_OK) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
                    try {
                        deviceManager.startObservingDevicePresence("Some MAC address");
                    } catch(DeviceNotAssociatedException e) {}
                }
            }
        }
    }

配套服务:

    @RequiresApi(VERSION_CODES.S)
    public class BleCompanionDeviceService extends CompanionDeviceService {
        private static final String TAG = "BleReceiver";
    
        @Override
        public void onCreate() {
            super.onCreate();
        }
    
        @Override
        public void onDeviceAppeared(@NonNull String s) {
            Log.d(TAG, "DEVICE APPEARED INTO RANGE");
        }
    
        @Override
        public void onDeviceDisappeared(@NonNull String s) {
            Log.d(TAG, "DEVICE DISAPPEARED");
        }
    
        @Override
        public void onDestroy() {
            Log.d(TAG, "SERVICE DESTROYED");
        }
    }

【问题讨论】:

    标签: android bluetooth-lowenergy android-ble android-companion-device


    【解决方案1】:

    这似乎是 CompanionDeviceManager 中发生的竞争条件,Android 13 应该已修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-26
      • 2011-11-22
      • 2022-11-17
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      相关资源
      最近更新 更多