BLE 错误应用程序“com.atakmap.android.helloworld.plugin”扫描过于频繁,无法找到回调包装器

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

我正在尝试将 BLE 功能添加到我正在使用此链接作为指南的插件中https://github.com/android/connectivity-samples/tree/master/BluetoothLeGatt/Application/src/main /java/com/example/android/bluetoothlegatt

我创建了所有相同的类,并使用一些更新的方法修改了代码,并将它们添加到我的应用程序中。我添加了代码,以便通过 DeviceScanActivity 类中的 BroadcastReceiver 类通过程序的主要部分访问它,并通过我的主程序获取其意图。尽管 BLE 设备屏幕会弹出并显示一些设备(如自述文件所示),但它通常是空白的。错误“com.atakmap.android.helloworld.plugin”扫描过于频繁”和“无法找到回调包装器”不断出现。我无法在指南链接的四个函数中找到控制扫描活动的位置,并且我不知道“无法找到回调包装器”是什么意思。我想知道我应该从这里做什么。也许有更新版本的教程来展示如何使用 BLE,这样这些错误就不会出现。 [[[enter image description here](https://i.stack.imgur.com/3orn2.png)](https://i.stack.imgur.com/eUwZa.png)](https://i.stack.imgur.com/XuX6T.png) 这是我的 DeviceScanActivity 类中的 BroadcastReceiver 类,我在其中从扫描中获取数据

/**
     * Broadcast Receiver that is responsible for getting the data back to the
     * plugin.
     */
    static class DeviceScanListener extends BroadcastReceiver {
        private boolean registered = false;
        private DeviceScanActivity.DeviceScanReceiver sdr = null;

        synchronized public void register(Context context,
                                          DeviceScanActivity.DeviceScanReceiver sdr) {

            if (!registered)
                context.registerReceiver(this, new IntentFilter(DSCAN_INFO ));

            this.sdr = sdr;
            registered = true;
        }

        @Override
        public void onReceive(Context context, Intent intent) {
            synchronized (this) {
                try {
                    Bundle extras = intent
                            .getExtras();
                    if (extras != null) {
                        //ArrayList<BluetoothDevice> s = (HashMap<String, String>) extras.get("mgrsData");
                        ArrayList<BluetoothDevice> s = mLeDeviceListAdapter.mLeDevices;
                        for (int i = 0; i < mLeDeviceListAdapter.mLeDevices.size(); i++){
                            BluetoothDevice currb = mLeDeviceListAdapter.mLeDevices.get(i);
                            Log.d("mine","Stuff in the DeviceList");
                            Log.d("mine",String.valueOf(i));

                        }
                        if (s != null && sdr != null)
                            sdr.onDeviceScanReceived(s);
                    }
                } catch (Exception ignored) {
                }
                if (registered) {
                    context.unregisterReceiver(this);
                    registered = false;
                }
            }
        }
    }


这是用于开始寻找BLE设备的按钮


        final Button connectDevice = helloView.findViewById(R.id.connect_device);

        connectDevice.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                //Todo
                dd1.register(getMapView().getContext(), ddr);
               
                Intent intent = new Intent();
                intent.setClassName("com.atakmap.android.helloworld.plugin",
                        "com.atakmap.android.helloworld.DeviceScanActivity");
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("EXTRA_MESSAGE", "");
                parentActivity.startActivityForResult(intent, 0);
               


            }
        });

我已尝试更新链接中提供的代码中的方法,以确保一切正常(用较新的方法替换已折旧的方法),但我似乎无法让它工作。我期望一个屏幕显示该区域中的 BLE 设备(我在 flutter 中制作的另一个应用程序可以执行此操作并显示 BLE 设备,因此我也应该在此应用程序上看到它们),但屏幕会弹出几秒钟离开前使用设备。

android bluetooth-lowenergy android-bluetooth
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.