猿问

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

该项目应该不断向我提供其 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();

                    }

                }

            }


        }

    };


至尊宝的传说
浏览 148回答 1
1回答

胡子哥哥

解决了!只需将 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();                }            }        }    };
随时随地看视频慕课网APP

相关分类

Java
我要回答