Android-Java Bluetooth на Samsung Galaxy
Вопрос
Может ли кто -нибудь объяснить мне, почему этот код дает мне всегда только одно устройство Bluetooth, даже если я работаю с двумя галактиками один рядом с другим? Этот код работает на вкладке Samsung Galaxy, и я использую для тестов Samsung Galaxy Gio как с правильной активацией Bluetooth. Если я проверю исследование по умолчанию, это работает ... но не с этим кодом:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
out = new TextView(this);
setContentView(out);
// Getting the Bluetooth adapter
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
out.append("\nAdapter: " + adapter);
// Check for Bluetooth support in the first place
// Emulator doesn't support Bluetooth and will return null
if (adapter == null) {
out.append("\nBluetooth NOT supported. Aborting.");
return;
}
// Starting the device discovery
out.append("\nStarting discovery...");
adapter.startDiscovery();
out.append("\nDone with discovery...");
// Listing paired devices out.append("\nDevices Paired:");
Set<BluetoothDevice> devices = adapter.getBondedDevices();
for (BluetoothDevice device : devices) {
out.append("\nFound device: " + device);
}
}
Решение
Я думаю, что вы неправильно понимаете то, что делаете.
С одной стороны, назвав это ...
SET DEVICES = ADAPTER.GETBONDEDDEVICES (); для (BluetoothDevice Device: Devices) {out.append (" nfound Device:" + Device); }
... вы ищете уже парные устройства. Если вы получите только один, причина проста, у вас есть только один в паре. Примите во внимание, что это вернет все парные устройства, независимо от того, являются ли они живыми или нет.
С другой стороны, вы начинаете открытие с ...
Adapter.StartDiscovery ();
... однако вы не зарегистрировали вещательный приемник для обработки * bluetoothdevice.action_found * Намерения, которые вы получите с каждым Обнаружение Устройство Bluetooth можно увидеть. Обнаружение это ключ здесь, потому что по умолчанию устройства Android не Обнаружение и они допускают только максимальное время типичных 120 секунд.
Другие советы
Посмотрите на API
http://developer.android.com/reference/android/bluetooth/bluetoothadapter.html#startdiscovery()
StartDiscovery является асинхронным - оно будет сканировать около 12 секунд, а затем получить названия устройств любых адресов, найденных в сканировании. Вы не ждете, пока открытие закончится, поэтому неудивительно, что не все устройства в диапазоне обнаруживаются к тому времени, когда вы проверяете результаты.
Вы говорите out.append("\nAdapter: " + adapter);
Но если вы работаете в Eclipse с XML или IntelliJ
TextView txt;
String text;
....
text += ("Adapter:" + adapter);
txt.setText(text);
Вы видите ошибку?