蓝牙的扫描

上一篇 蓝牙打开和关闭

在这里插入图片描述

蓝牙扫描 返回boolean值
public boolean startDiscovery()

示例:

   /**
     * 开始扫描
     *
     * @return
     */
    public boolean startScan(){
        if (BluetoothManager.newInstance().isBlueEnable()){
            //如果正在扫描取消
            if (BluetoothManager.newInstance().getBluetoothAdapter().isDiscovering()){
                BluetoothManager.newInstance().getBluetoothAdapter().cancelDiscovery();
            }
            /*开始扫描蓝牙  返回true表示扫描成功  通过广播接收返回结果*/
            return BluetoothManager.newInstance().getBluetoothAdapter().startDiscovery();
        }else {
            Toast.makeText(getContext(),"请打开蓝牙",Toast.LENGTH_LONG).show();
        }
        return false;
    }

正在扫描和取消扫描
public boolean isDiscovering()
public boolean cancelDiscovery()

示例:

  /**
     * 取消扫描
     */
    public void cancelScan(){
        if (BluetoothManager.newInstance().isBlueEnable()){
            if (BluetoothManager.newInstance().getBluetoothAdapter().isDiscovering()){
                BluetoothManager.newInstance().getBluetoothAdapter().cancelDiscovery();
            }
        }
    }

通过广播接收扫描的结果

  • 注册广播
 public void register(){
        IntentFilter filter1 = new IntentFilter(android.bluetooth.BluetoothAdapter.ACTION_DISCOVERY_STARTED);
        IntentFilter filter2 = new IntentFilter(android.bluetooth.BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        IntentFilter filter3 = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        getContext().registerReceiver(scanBlueReceiver,filter1);
        getContext().registerReceiver(scanBlueReceiver,filter2);
        getContext().registerReceiver(scanBlueReceiver,filter3);
    }
  • 接收广播
String TAG= "=======bluetooth======";
    private ScanBlueReceiver scanBlueReceiver = new ScanBlueReceiver();
    public class  ScanBlueReceiver extends BroadcastReceiver{
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
//            Log.d(TAG, "action:" + action);
            switch (action){
                case BluetoothAdapter.ACTION_DISCOVERY_STARTED:
                    Log.d(TAG, "开始扫描...");
                    progressBar .setVisibility(View.VISIBLE);
                    break;
                case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:
                    Log.d(TAG, "结束扫描...");
                    progressBar .setVisibility(View.GONE);
                    break;
                case BluetoothDevice.ACTION_FOUND:
                    //发现设备
                    if (!TextUtils.isEmpty(device.getName())){
                        Log.d(TAG, "device: 蓝牙名字=" + device.getName()+",mac地址 = "+device.getAddress()+",蓝牙类型 ="+device.getType()+",绑定状态 ="+device.getBondState());
                        list.add(device);
                        adapter.notifyDataSetChanged();
                    }
                    if (scanBluetoothResult!=null){
                        scanBluetoothResult.result(device);
                    }
                    break;
            }
        }
    }
  • 完整代码
public class DiscoveryBluetooth extends Dialog {

    private ProgressBar progressBar;
    private RecyclerView mRecyclerView ;
    private MyAdapter adapter;
    List<BluetoothDevice> list = new ArrayList<>();


    public DiscoveryBluetooth(Context context) {
        super(context,R.style.dialog);
        setContentView(R.layout.discovery_bluetooth_layout);
        progressBar=findViewById(R.id.progressBar);
        mRecyclerView = findViewById(R.id.mRecyclerView);
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getContext());
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(),DividerItemDecoration.VERTICAL));
        mRecyclerView.setLayoutManager(linearLayoutManager);
        mRecyclerView.setAdapter(adapter=new MyAdapter());


        findViewById(R.id.start).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                list.clear();
                startScan();
            }
        });



        findViewById(R.id.stop).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cancelScan();
            }
        });
        register();


        Window window = getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.MATCH_PARENT;
        window.setAttributes(lp);
    }


    /**
     * 开始扫描
     *
     * @return
     */
    public boolean startScan(){
        if (BluetoothManager.newInstance().isBlueEnable()){
            //如果正在扫描取消
            if (BluetoothManager.newInstance().getBluetoothAdapter().isDiscovering()){
                BluetoothManager.newInstance().getBluetoothAdapter().cancelDiscovery();
            }
            /*开始扫描蓝牙  返回true表示扫描成功  通过广播接收返回结果*/
            return BluetoothManager.newInstance().getBluetoothAdapter().startDiscovery();
        }else {
            Toast.makeText(getContext(),"请打开蓝牙",Toast.LENGTH_LONG).show();
        }
        return false;
    }



    /**
     * 取消扫描
     */
    public void cancelScan(){
        if (BluetoothManager.newInstance().isBlueEnable()){
            if (BluetoothManager.newInstance().getBluetoothAdapter().isDiscovering()){
                BluetoothManager.newInstance().getBluetoothAdapter().cancelDiscovery();
            }
        }
    }




    public void register(){
        IntentFilter filter1 = new IntentFilter(android.bluetooth.BluetoothAdapter.ACTION_DISCOVERY_STARTED);
        IntentFilter filter2 = new IntentFilter(android.bluetooth.BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        IntentFilter filter3 = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        getContext().registerReceiver(scanBlueReceiver,filter1);
        getContext().registerReceiver(scanBlueReceiver,filter2);
        getContext().registerReceiver(scanBlueReceiver,filter3);
    }



    String TAG= "=======bluetooth======";
    private ScanBlueReceiver scanBlueReceiver = new ScanBlueReceiver();
    public class  ScanBlueReceiver extends BroadcastReceiver{
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
//            Log.d(TAG, "action:" + action);
            switch (action){
                case BluetoothAdapter.ACTION_DISCOVERY_STARTED:
                    Log.d(TAG, "开始扫描...");
                    progressBar .setVisibility(View.VISIBLE);
                    break;
                case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:
                    Log.d(TAG, "结束扫描...");
                    progressBar .setVisibility(View.GONE);
                    break;
                case BluetoothDevice.ACTION_FOUND:
                    //发现设备
                    if (!TextUtils.isEmpty(device.getName())){
                        Log.d(TAG, "device: 蓝牙名字=" + device.getName()+",mac地址 = "+device.getAddress()+",蓝牙类型 ="+device.getType()+",绑定状态 ="+device.getBondState());
                        list.add(device);
                        adapter.notifyDataSetChanged();
                    }
                    if (scanBluetoothResult!=null){
                        scanBluetoothResult.result(device);
                    }
                    break;
            }
        }
    }


    private ScanBluetoothResult scanBluetoothResult;
    public interface ScanBluetoothResult{
        void result(BluetoothDevice device);
    }

    /**
     * @param scanBluetoothResult
     * @return
     */
    public DiscoveryBluetooth setScanBluetoothResult(ScanBluetoothResult scanBluetoothResult) {
        this.scanBluetoothResult = scanBluetoothResult;
        return this ;
    }


    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{

        @NonNull
        @Override
        public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            return new MyViewHolder(LayoutInflater.from(getContext()).inflate(android.R.layout.test_list_item,viewGroup,false));
        }

        @Override
        public int getItemCount() {
            return list.size();
        }

        @Override
        public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder myViewHolder,  int i) {
            if (list.size()>0){
                final BluetoothDevice d = list.get(i);
                myViewHolder.textView.setText(d.getName()+"-"+d.getAddress());
                myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        CreateBondBluetooth createBondBluetooth=new CreateBondBluetooth(getContext());
                        createBondBluetooth.CreateBond(d);
                        createBondBluetooth.show();
                    }
                });
            }
        }

        class MyViewHolder extends RecyclerView.ViewHolder{
            public TextView textView;
            public MyViewHolder(@NonNull View itemView) {
                super(itemView);
                textView =itemView.findViewById(android.R.id.text1);
                textView.setTextColor(Color.BLACK);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

将哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值