Android Bluetooth Discovery последовательным способом? - PullRequest
2 голосов
/ 09 января 2012

Я новичок в программировании Android.Я хочу создать библиотеку (файл JAR), которая будет содержать функцию обнаружения Bluetooth.Поскольку это библиотека, метод внутри должен быть последовательным методом (запустить обнаружение Bluetooth, подождать некоторое время и вернуть результат).Я сделал код ниже, но он не работает.В LogCat я мог видеть намерения, но BroadcastReceiver не мог поймать намерения.Что-то не так с кодом?

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Get local Bluetooth adapter
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

    mSendButton = (Button) findViewById(R.id.button1);
    mSendButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            doDiscovery();
        }
    });
}

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Get the BluetoothDevice object from the Intent
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            Log.e("device_name", device.getName());
            Log.e("device_add", device.getAddress());
            numberOfDevice++;
            Found_Device = true;
        } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
            if(numberOfDevice == 0){
                Log.e("DISCOVERY", "No Device found");
            }
            Log.e("DISCOVERY", "Number of device :" + numberOfDevice);
            Discovery_Finish = true;
        }
    }
};

public void doDiscovery(){
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    registerReceiver(mReceiver, filter);

    Discovery_Finish = false;
    Found_Device = false;
    long counter = 0;

    if (mBluetoothAdapter.isDiscovering()) {
        mBluetoothAdapter.cancelDiscovery();
    }
    mBluetoothAdapter.startDiscovery();
    while((Found_Device == false) || (Discovery_Finish == false)){
        counter++;
        if (counter >= 1000000){
            break;
        }
    }
    // Add a code to check the number of device

    unregisterReceiver(mReceiver);
    mBluetoothAdapter.cancelDiscovery();
}

Есть ли способ проверить намерение без использования BroadcastReceiver?Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2016

Вы перезаписываете свой IntentFilter, когда делаете это:

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);

Вы должны сделать это так:

IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
filter.addAction(BluetoothDevice.ACTION_FOUND);
0 голосов
/ 25 июля 2012

Я думаю, вам не хватает, чтобы начать обнаруживать другие устройства.

...