#android #bluetooth
#Android #bluetooth
Вопрос:
Я написал свое первое приложение для Android, и все работает очень хорошо, except…in приведенная ниже процедура ACTION_DISCOVERY_FINISHED, похоже, никогда не вызывается (или транслируется, или принимается, или что-то еще). Независимо от того, какой блок кода в этом «еще, если» не работает.
Я тестировал только на своем Motorola Atrix, поэтому мне интересно, проблема ли это. Поскольку я тестирую функциональность Bluetooth, я не думаю, что смогу использовать эмулятор Android для эффективного тестирования.
Мысли?
private BluetoothAdapter mBtAdapter;
mBtAdapter.startDiscovery();
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// When discovery finds a device
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
//do something
}
else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
//do something else
}
}
}
Ответ №1:
2 возможных решения:
-
Вместо создания анонимного приемника, подкласс BroadcastReceiver с точно такой же реализацией, затем объявите его в манифесте вашего проекта (не забудьте объявить, что ваш приемник получает эти действия, которые вы хотите).
-
Динамически регистрируйте его из своей активности / службы таким образом:
IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_FOUND); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); this.registerReceiver(mReceiver, filter);
Я не уверен, нужно ли вам отменять регистрацию при регистрации в activity / service (я знаю, что вы должны это делать при регистрации из контекста приложения), поэтому проверьте это.
Комментарии:
1. Я попробовал # 1. Это не улучшило ситуацию. У меня такое чувство, что «что-то происходит», как будто это действие не происходит на моем телефоне. Тем не менее, дикое предположение.
2. Проверьте уровень API для этих действий, я уверен, что его 3, что означает android 1.5, который у вас наверняка есть. Попробуйте номер 2.
3. Добавил это, чтобы завершить его iFilterBluetooth.addAction(BluetoothAdapter. ACTION_DISCOVERY_STARTED);
Ответ №2:
Вам нужно добавить строку
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
в ваш манифест