Обнаружение устройств Bluetooth в Android — startDiscovery()

Цель: Создать приложение для Android, которое обнаруживает имена и адреса устройств BT в пределах досягаемости и отправляет их значения в веб-службу. Устройства BT ранее не были привязаны к хост-устройству, я просто хочу опрашивать все, пока хожу.

Что сделано:

  1. Изучил документацию.
  2. Реализован локальный экземпляр BT-адаптера хост-устройства.
  3. Реализовано уведомление о включении BT, если оно не включено.
  4. Зарегистрированные широковещательные приемники и намерения для анализа ACTION_FOUNDs, исходящих из startDiscovery().
  5. Зарегистрированы разрешения BLUETOOTHи BLUETOOTH_ADMINв манифесте.

Все работает (как было проверено с инкрементным протоколированием консоли) до startDiscovery().


Разочарование:

  • startDiscovery()-- я подозреваю, что передаю это в неправильном контексте. В какой контекст должен быть помещен этот метод, чтобы он функционировал должным образом?

Если вам удалось заставить этот метод работать, я был бы очень признателен за вашу мудрость.

ОБНОВЛЕНИЕ- вот урезанная упрощенная версия кода, который меня огорчает; это упрощение повторяет мою ошибку. Этот код работает, он не выдает ошибок cat.logили других ошибок, он просто не дает никаких результатов.

package aqu.bttest;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.Toast;

public class BT2Activity extends Activity {

private BluetoothAdapter mBTA;
private SingBroadcastReceiver mReceiver;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

  //register local BT adapter
    mBTA = BluetoothAdapter.getDefaultAdapter();
    //check to see if there is BT on the Android device at all
    if (mBTA == null){
        int duration = Toast.LENGTH_SHORT;
        Toast.makeText(this, "No Bluetooth on this handset", duration).show();
    }
    //let's make the user enable BT if it isn't already
    if (!mBTA.isEnabled()){
        Intent enableBT = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBT, 0xDEADBEEF);
    }
    //cancel any prior BT device discovery
    if (mBTA.isDiscovering()){
        mBTA.cancelDiscovery();
    }
    //re-start discovery
    mBTA.startDiscovery();

    //let's make a broadcast receiver to register our things
    mReceiver = new SingBroadcastReceiver();
    IntentFilter ifilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    this.registerReceiver(mReceiver, ifilter);
}

private class SingBroadcastReceiver extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction(); //may need to chain this to a recognizing function
        if (BluetoothDevice.ACTION_FOUND.equals(action)){
            // Get the BluetoothDevice object from the Intent
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // Add the name and address to an array adapter to show in a Toast
            String derp = device.getName() + " - " + device.getAddress();
            Toast.makeText(context, derp, Toast.LENGTH_LONG);
        }
    }
}

}

15
задан Majid Golshadi 11 January 2014 в 16:23
поделиться