我目前正在開發一個小應用程序,以開始使用藍牙Android API可提供的服務。Android - 藍牙發現沒有找到任何設備
編輯 - >答:
看來,這個問題是由於特定的Nexus 5設備。似乎他們的藍牙接收器不能正常工作。下面的解決方案應適用於其他設備
備註:在/ lorensiuswlt/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上的下面的源代碼:
我在這裏閱讀文檔AndroBluetooth
我已經完成了幾乎所有對我感興趣的功能(如檢查適配器是否存在,啓用/禁用藍牙,查詢配對設備,設置適配器可發現)。
問題:
實際上沒有裝置被發現當我啓動.onDiscovery()方法,即使器件由設置/藍牙我的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(在藍牙啓用時)和兩個ACTION_DISCOVERY _ ***。
下面的方法,然後successfuly稱爲:
public void onDiscovery(View view)
{
mBluetoothAdapter.startDiscovery();
}
然後,我有我的藍牙接收器:
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());
}
}
};
我沒有任何問題,走出logcat的,並沒有注意到我在測試過程中遇到任何麻煩。唯一的問題是在掃描結束時沒有發現任何設備,此時許多可發現的設備在周圍可用。
我試圖不要放太多的代碼,以免氾濫的話題。問我是否需要更多。
感謝您閱讀我,並提前感謝您的答案。
這沒有奏效,我真的不明白爲什麼會這麼做,因爲這個權限是關於使用Android的網絡位置提供程序的。你確定這是固定你的問題嗎? – Amesys
這也適用於我! – Xema
是的。我們在Android 5上完全使用藍牙,升級到6時唯一的問題是在發現過程中找不到藍牙設備。這對我們也沒有任何意義。我們使用'startDiscovery()'方法,和你一樣。 – nverbeek