bluetoothAdapter.startDiscovery();搜索不到设备

雕·不懒惰 2019-09-03 03:38:46
项目需求手机之间蓝牙通信,一个client,一个server,另有自己手机华为

client代码如下
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bluetooth_list);
Butterknife.bind(this);

.......

registReceiver();
getBlueList();

}
private void getBlueList() {
new Thread(new Runnable() {
@Override
public void run() {
if (bluetoothAdapter.isDiscovering())
bluetoothAdapter.cancelDiscovery();
bluetoothAdapter.startDiscovery();
}
}).start();
}

private void registReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
registerReceiver(broadcastReceiver, intentFilter);
}

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent == null)
return;

BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device != null) {
LogUtils.e(" getAddress: " + device.getAddress() + " name: " + device.getName());
names.add(device.getAddress());
}
if (TextUtils.equals(intent.getAction(), BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {
if (names.size() == 0) {
Toast.makeText(BlueClientActivity.this, "未发现可连接的蓝牙设备", Toast.LENGTH_SHORT).show();
} else {
arrayAdapter.notifyDataSetChanged();
}
}
LogUtils.e没有输出,说明device=null,在系统设置蓝牙里面列表里有华为,但是代码里面就是搜索不到任何设备
...全文
1009 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_43203662 2021-05-21
  • 打赏
  • 举报
回复
遇到同样的问题,可惜解决后才看到这个。本来在手机上调试没点问题,换平板调试就出现这个问题了,要把平板定位图标打开才行。手机不打开也没事,可能是华为平板的原因?虽然不知道蓝牙扫描为什么要开定位,平板自带的蓝牙设置打开就能扫描到新设备,不需要开定位,不知道具体原因,反正解决了就完了
Jiesen_Wang 2021-03-10
  • 打赏
  • 举报
回复
卧槽,别人的手机都行,就只有一个不行,原来是位置功能没有打开
SimPong 2020-11-13
  • 打赏
  • 举报
回复
引用 3 楼 ink_s 的回复:
4.0蓝牙的话用的下边的方法搜索 mBluetoothLeScanner.startScan(leCallback); mBluetoothAdapter.startLeScan(mLeScanCallback); Android6.0以上的话除了要定位权限,还要手动把GPS图标打开 Intent locationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); this.startActivityForResult(locationIntent, REQUEST_CODE_LOCATION_SETTINGS);
手动打开GPS,真的是帮大忙了找了老半天结果居然是因为这个
雕·不懒惰 2019-09-03
  • 打赏
  • 举报
回复
引用 7 楼 usecf 的回复:
估计要动态申请权限才行
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

switch (requestCode) {
case 110:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

isScanning = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
bleScanner.startScan(scanCallback);
}
} else
Toast.makeText(this, "没有获取到定位权限", Toast.LENGTH_LONG).show();
break;

}
}

动态申请了的
usecf 2019-09-03
  • 打赏
  • 举报
回复
估计要动态申请权限才行 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 110: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { isScanning = true; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { bleScanner.startScan(scanCallback); } } else Toast.makeText(this, "没有获取到定位权限", Toast.LENGTH_LONG).show(); break; } }
雕·不懒惰 2019-09-03
  • 打赏
  • 举报
回复
引用 5 楼 zhang106209 的回复:
打开定位的权限

上面说了已经开了权限并且手机是root过了的
zhang106209 2019-09-03
  • 打赏
  • 举报
回复
打开定位的权限
雕·不懒惰 2019-09-03
  • 打赏
  • 举报
回复
引用 3 楼 ink_s 的回复:
4.0蓝牙的话用的下边的方法搜索
mBluetoothLeScanner.startScan(leCallback);
mBluetoothAdapter.startLeScan(mLeScanCallback);

Android6.0以上的话除了要定位权限,还要手动把GPS图标打开
Intent locationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
this.startActivityForResult(locationIntent, REQUEST_CODE_LOCATION_SETTINGS);

不是蓝牙4.0
ink_s 2019-09-03
  • 打赏
  • 举报
回复

4.0蓝牙的话用的下边的方法搜索
mBluetoothLeScanner.startScan(leCallback);
mBluetoothAdapter.startLeScan(mLeScanCallback);

Android6.0以上的话除了要定位权限,还要手动把GPS图标打开
Intent locationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
this.startActivityForResult(locationIntent, REQUEST_CODE_LOCATION_SETTINGS);
雕·不懒惰 2019-09-03
  • 打赏
  • 举报
回复
引用 1 楼 usecf 的回复:
有没有开定位gps


手机也是root过了的
usecf 2019-09-03
  • 打赏
  • 举报
回复
有没有开定位gps

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧