public class Myservice extends Service {
    private BluetoothAdapter bTAdatper;
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }    @Override
    public void onCreate() {
        super.onCreate();
        bTAdatper = BluetoothAdapter.getDefaultAdapter();
        initReceiver();
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (bTAdatper.isDiscovering()) {
                    System.out.println("11");
                    try {
                        Thread.sleep(1000);
                        bTAdatper.startDiscovery();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
    private void initReceiver() {
        //注册广播
        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothDevice.ACTION_FOUND);
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        registerReceiver(mReceiver, filter);
    }
    //广播接收器
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                //避免重复添加已经绑定过的设备
                if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
                    //adapter.add(device);                }
            } else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
                System.out.println("开始搜索");
                //Toast.makeText(getActivity(), "开始搜索", Toast.LENGTH_SHORT).show();
            } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
                System.out.println("搜索完毕");
            }
        }
    };
}

解决方案 »

  1.   

    没log?没报错?
    或者版本低的手机能运行么?
      

  2.   

    while (bTAdatper.isDiscovering()) {  <-----这里一直是false,没往下走,就是没有开始蓝牙搜索,接受不到广播,如果已经开始了搜索,bTAdatper.isDiscovering()=true,那循坏不是一直走?
                        System.out.println("11");
                        try {
                            Thread.sleep(1000);
                            bTAdatper.startDiscovery();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
    不需要搞1秒延时, initReceiver();之后
    if(!bTAdatper.isDiscovering()){ //判断没有在搜索就开始走索蓝牙
    bTAdatper.startDiscovery();
    }
      

  3.   

    我按照您说的重新改了一下,链接:https://pan.baidu.com/s/10n5tQQJeRNk5kJE4VNX-Lw 提取码:36s0,但是还是有问题,可以帮我看看吗
      

  4.   

    Application中注册广播?没见过这种操作,放到Service中吧
    另外,要会打日志断点调试找问题出现在哪里
      

  5.   

     https://bbs.csdn.net/topics/394907454帮我看看这个好吗,我在service中搜索蓝牙,但是只能开始搜索和搜索完毕,不能发现设备
      

  6.   

       BlueToothReceiver receiver = new BlueToothReceiver();
            registerReceiver(receiver, makeFilter());  @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
        private void startSearch() {        if (bluetoothAdapter == null) {
                Logger.d("gxh", "device not support bluetooth");
                swipeRefreshLayout.setRefreshing(false);
                return;
            }        //判断蓝牙是否开启
            if (bluetoothAdapter.isEnabled()) {
                if (bluetoothAdapter.isDiscovering()) {
                    bluetoothAdapter.cancelDiscovery();
                }
                deviceMap.clear();
                bluetoothAdapter.startDiscovery();
            } else {
                Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enabler, 100);
            }    }
     public class BlueToothReceiver extends BroadcastReceiver {        @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                    BluetoothDevice device = intent
                            .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    deviceMap.put(device.getAddress(), device);
                    Logger.d("gxh", "found:" + device.getName());
                } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
                    //搜索完毕
                    Logger.d("gxh", "ACTION_DISCOVERY_FINISHED");
                    swipeRefreshLayout.setRefreshing(false);
                    devices.clear();
                    for (Map.Entry<String, BluetoothDevice> entry : deviceMap.entrySet()) {
                        devices.add(entry.getValue());
                    }
                    blueConfigAdapter.setNewData(devices);
                }
            }
        }
      public IntentFilter makeFilter() {
            IntentFilter filter = new IntentFilter();
            filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);//蓝牙状态改变的广播
            filter.addAction(BluetoothDevice.ACTION_FOUND);//找到设备的广播
            filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//搜索完成的广播
            filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);//开始扫描的广播
            filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);//状态改变
            return filter;
        }
    这是我以前写的,可以用。