В настоящее время я работаю над небольшим приложением, чтобы начать работу с услугами, которые может предоставить Bluetooth Android API.
Изменить → Ответ:
Кажется, что проблема связана с конкретными устройствами Nexus 5. Похоже, их приемник Bluetooth работает не очень хорошо. Решение ниже должно работать для других устройств.
Примечание:
-
Здесь я прочитал документацию: http://developer.android.com/guide/topics/connectivity/bluetooth.html а также следующий исходный код этого учебника http://www.londatiga.net/it/programming/android/how-to-programmatically-scan-or-discover-android-bluetooth-device/, расположенный на github под /lorensiuswlt/AndroBluetooth
-
Ive завершил почти все функции, которые меня интересовали (например, проверка наличия адаптера, включение/выключение синуса, запрос парных делений, установка адаптера для обнаружения).
Вопрос:
Фактически устройство не найдено, когда я запускаю метод .onDiscovery(), даже если устройства найдены из настроек /Bluetooth на моем Nexus 5.
Вот как я его обрабатываю:
public class MainActivity extends AppCompatActivity {
private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
...
protected void onCreate(Bundle savedInstanceState) {
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(mReceiver, filter);
}
Фильтр работает хорошо, насколько я мог бы попробовать, например ACTION_STATE_CHANGED (при включении bluetooth) и двух ACTION_DISCOVERY _ ***.
Затем успешно применяется следующий метод:
public void onDiscovery(View view)
{
mBluetoothAdapter.startDiscovery();
}
А потом у меня есть приемник Bluetooth:
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
if (state == BluetoothAdapter.STATE_ON) {
showToast("ACTION_STATE_CHANGED: STATE_ON");
}
}
else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
mDeviceList = new ArrayList<>();
showToast("ACTION_DISCOVERY_STARTED");
mProgressDlg.show();
}
else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action) && !bluetoothSwitchedOFF) {
mProgressDlg.dismiss();
showToast("ACTION_DISCOVERY_FINISHED");
Intent newIntent = new Intent(MainActivity.this, DeviceListActivity.class);
newIntent.putParcelableArrayListExtra("device.list", mDeviceList);
startActivity(newIntent);
}
else if (BluetoothDevice.ACTION_FOUND.equals(action)) {// When discovery finds a device
// Get the BluetoothDevice object from the Intent
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
mDeviceList.add(device);
showToast("Device found = " + device.getName());
}
}
};
У меня нет каких-либо проблем, выходящих из логарифма, и я не заметил никаких проблем во время теста, который я сделал. Единственная проблема заключается в том, что не обнаружено устройство в конце сканирования, когда доступно много доступных для поиска файлов arround.
Я старался не вводить слишком много кода, чтобы не наводнять тему. Спросите меня, нужно ли вам больше.
Спасибо, что прочитал меня и заблаговременно за вас ответил.