Android蓝牙发现

时间:2012-03-23 21:38:42

标签: java android bluetooth

当发现其他蓝牙设备时,我会为找到的每个设备发送2个广播。第一个是在扫描期间发送的,当完成扫描时,会立即为所有找到的设备发送广播。我正在调整SDK中的BluetoothChat示例。

这是我的'BroadcastReceiver':

 private final BroadcastReceiver foundRec = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(BluetoothDevice.ACTION_FOUND)) {

            Log.e(TAG, "--- device found ---");

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

            if (dev.getBondState() == BluetoothDevice.BOND_BONDED) {
                availableDevices.add(dev.getName() + " (paired)");
            } else {
                availableDevices.add(dev.getName());
            }

        } else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED)){

            Log.d(TAG, "DISCOVERY STARTED");
            findViewById(R.id.lookup).setVisibility(View.VISIBLE);

        }
    }
};

谢谢!

2 个答案:

答案 0 :(得分:1)

我保留了一系列设备。每次收到ACTION_FOUND时,我都会通过设备阵列检查它是否存在。我的语法可能不对,在浏览器中键入...但希望你明白了。

我不知道你使用的可用数据是什么,但是如果你使用BluetoothDevice数组而不是String数组可能会更有用。您始终可以获取名称并检查onReceive之外的绑定状态。

private final BroadcastReceiver foundRec = new BroadcastReceiver() {
List<BluetoothDevice> BtDevices = new ArrayList<BluetoothDevice>();
@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (action.equals(BluetoothDevice.ACTION_FOUND)) {

        Log.e(TAG, "--- device found ---");

        BluetoothDevice dev = intent
                .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        if(!IsBtDevPresent(dev)) {
            BtDevices.add(dev);
            if (dev.getBondState() == BluetoothDevice.BOND_BONDED) {
                availableDevices.add(dev.getName() + " (paired)");
            } else {
                availableDevices.add(dev.getName());
            }
        }
    } else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED)){

        Log.d(TAG, "DISCOVERY STARTED");
        findViewById(R.id.lookup).setVisibility(View.VISIBLE);

    }
}

private boolean IsBtDevPresent(BluetoothDevice dev) {
    int size = BtDevices.size();
    for(int i = 0; i<size; i++) {
         if( BtDevices.get(i).equals(dev)) {
             return true;
         }
    }
    return false;
}

};

答案 1 :(得分:0)

实际上,ICS和更多设备发送两个广播,一个用于查询扫描,另一个用于页面扫描。这就是为什么我们收到两次!!

但我在2.3.5设备中测试了相同的代码,其中我只收到一个广播接收!!它怎么管理? 我们需要,个人广播查询和页面或单个广播!任何人都可以谈论这个!!