为了账号安全,请及时绑定邮箱和手机立即绑定

我正在做一个项目,它不断为我提供以前配对设备的 RSSI。我没有得到连续的结果

我正在做一个项目,它不断为我提供以前配对设备的 RSSI。我没有得到连续的结果

至尊宝的传说 2021-10-13 16:46:21
该项目应该不断向我提供其 MAC 地址已知的设备的 RSSI。我得到大约 2-3 次 RSSI,然后什么都没有。即使我在安卓手机上测试这个设备,我也可以绕过谷歌向我抛出的电池限制等。该项目的目标设备将是有根的 Android M 设备。这是我的代码: private final BroadcastReceiver broadcastReceiver=new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            String action=intent.getAction();            if(BluetoothDevice.ACTION_FOUND.equals(action)){                BluetoothDevice device=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);                String deviceName=device.getName();                String deviceHardwareAddress=device.getAddress();                int rssi=intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);                if(deviceHardwareAddress.equals(MAC)){                    deviceFound=true;                    bluetoothAdapter.cancelDiscovery();                    Log.i("broadcastReceiver" , "device " + deviceName);                    Log.i("broadcastReceiver" , "hard"  + deviceHardwareAddress);                    Log.i("broadcastReceiver","Rssi "+rssi);                    Log.i("broadcastReceiver","Paired Id "+MAC );                    tv.setText(deviceName+"     "+rssi);                    stringArrayList.add(String.valueOf(rssi));                    arrayAdapter.notifyDataSetChanged();                    deviceFound=false;                    bluetoothAdapter.startDiscovery();                }                if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){                    if(deviceFound==false){                        bluetoothAdapter.startDiscovery();                    }                }            }        }    };
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

解决了!


只需将 BroadcastReceiver 分成两部分即可。请不要在不了解会发生什么的情况下复制此答案。此代码会消耗大量电池电量。我的项目允许这样做。它将具有类似于连续电源的功能。它仅在某些条件下运行。干杯!


  private final BroadcastReceiver broadcastReceiver1=new BroadcastReceiver() {

        @Override

        public void onReceive(Context context, Intent intent) {

            String action=intent.getAction();

            if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){

                if(deviceFound==false) {

                    bluetoothAdapter.cancelDiscovery();

                    bluetoothAdapter.startDiscovery();

                }

            };

        }

    };

private final BroadcastReceiver broadcastReceiver=new BroadcastReceiver() {

        @Override

        public void onReceive(Context context, Intent intent) {

            String action=intent.getAction();


            if(BluetoothDevice.ACTION_FOUND.equals(action)){

                BluetoothDevice device=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                String deviceName=device.getName();

                String deviceHardwareAddress=device.getAddress();

                int rssi=intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);

                if(deviceHardwareAddress.equals(MAC)){

                    deviceFound=true;

                    bluetoothAdapter.cancelDiscovery();

                    Log.i("broadcastReceiver" , "device " + deviceName);

                    Log.i("broadcastReceiver" , "hard"  + deviceHardwareAddress);

                    Log.i("broadcastReceiver","Rssi "+rssi);

                    Log.i("broadcastReceiver","Paired Id "+MAC );

                    tv.setText(deviceName+"     "+rssi);

                    deviceFound=false;

                    bluetoothAdapter.startDiscovery();

                }

            }


        }

    };


查看完整回答
反对 回复 2021-10-13
  • 1 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信