本文主要是介绍蓝牙的扫描,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上一篇 蓝牙打开和关闭
蓝牙扫描 返回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)@Overridepublic 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() {@Overridepublic void onClick(View v) {list.clear();startScan();}});findViewById(R.id.stop).setOnClickListener(new View.OnClickListener() {@Overridepublic 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)@Overridepublic 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@Overridepublic MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {return new MyViewHolder(LayoutInflater.from(getContext()).inflate(android.R.layout.test_list_item,viewGroup,false));}@Overridepublic int getItemCount() {return list.size();}@Overridepublic 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() {@Overridepublic 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);}}}
}
这篇关于蓝牙的扫描的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!