Android Bluetooth Discovery - PullRequest
       0

Android Bluetooth Discovery

0 голосов
/ 24 марта 2012

При обнаружении других устройств Bluetooth я получаю 2 широковещательных сообщения для каждого найденного устройства.Первый отправляется во время сканирования, а по окончании сканирования широковещание отправляется сразу для всех найденных устройств.Я адаптирую образец BluetoothChat в SDK.

Вот мой 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 ]

1 голос
/ 24 марта 2012

Я храню массив устройств.Каждый раз, когда принимается ACTION_FOUND, я просматриваю массив устройств, чтобы проверить, присутствует ли он.Мой синтаксис может быть неправильным, набран в браузере ... но, надеюсь, вы поняли идею.

Я не знаю, для чего вы используете свой массив availableDevices, но это может быть более полезно, если вы используете массив 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;
}

};

0 голосов
/ 06 октября 2013

На самом деле устройства ICS и выше отправляют две широковещательные рассылки, одну для сканирования запроса, а другую для сканирования страницы. Вот почему мы получаем дважды !!

Но я протестировал тот же код на устройстве 2.3.5, в котором я получил только один широковещательный прием !! Как это получается? Что нам требуется, индивидуальная трансляция для запроса и страницы или одной трансляции! Может ли кто-нибудь говорить об этом !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...