一、蓝牙介绍
是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换,我们主要掌握这几项技能:
1、添加权限:
2、打开蓝牙并允许搜索
3、搜索附近的蓝牙:
4、关闭蓝牙:
二、蓝牙代码展示:
1、蓝牙布局文件及效果展示:
2、主类代码展示:
public class Main21Activity extends AppCompatActivity implements View.OnClickListener {
private RecyclerView recyclerView;
private MyAdapter adapter;
private List list = new ArrayList<>();
Button b1,b2,b3;
private BluetoothManager bluetoothManager;
private BluetoothAdapter bluetoothAdapter;
private BluetoothReceiver bluetoothReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main21);
initView();
initDate();
}
private void initView() {
b1 = findViewById(R.id.btn_start);
b2 = findViewById(R.id.btn_top);
b3 = findViewById(R.id.btn_search);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
b3.setOnClickListener(this);
LinearLayoutManager manager = new LinearLayoutManager(this);
manager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView = findViewById(R.id.rectclerView);
recyclerView.setLayoutManager(manager);
adapter = new MyAdapter(this,list);
recyclerView.setAdapter(adapter);
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
private void initDate() {
bluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
bluetoothAdapter = bluetoothManager.getAdapter(); //蓝牙adapter
if (bluetoothAdapter == null){
finish();
return;
}
bluetoothReceiver = new BluetoothReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND); //可发现
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); //搜索结束
intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED); //绑定状态
registerReceiver(bluetoothReceiver,intentFilter);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_start:
boolean flag = bluetoothAdapter.enable();
if (!flag){
Intent intent = new Intent();
intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE); //启动蓝牙
intent.setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); //开启本设备可被发现
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,200); //指定搜索设备时间
startActivityForResult(intent,100);
}
break;
case R.id.btn_top:
bluetoothAdapter.disable(); //关闭蓝牙
list.clear();
adapter.refresh(list);
break;
case R.id.btn_search:
bluetoothAdapter.startDiscovery(); //开启搜索
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && requestCode == RESULT_OK){
Toast.makeText(this, "开启蓝牙成功", Toast.LENGTH_SHORT).show();
}
}
class BluetoothReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
switch (action){
case BluetoothDevice.ACTION_FOUND:
//搜索到一台蓝牙设备,进入一次found
//搜索到的设备保存到list中
BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
BlueToothBean blueToothBean = new BlueToothBean();
blueToothBean.name = bluetoothDevice.getName();
blueToothBean.address = bluetoothDevice.getAddress();
blueToothBean.bluetoothDevice = bluetoothDevice;
list.add(blueToothBean);
Log.e("list-------------",list+"");
adapter.refresh(list);
break;
case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:
adapter.refresh(list);
break;
default:
break;
}
}
}
}
3、适配器代码:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context context;
private List<BlueToothBean> list;
public MyAdapter(Context context, List<BlueToothBean> list) {
this.context = context;
this.list = list;
}
public void refresh(List<BlueToothBean> list){
this.list.addAll(list);
notifyDataSetChanged();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.day20_item,viewGroup,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
myViewHolder.name.setText(list.get(i).getName());
myViewHolder.address.setText(list.get(i).getAddress());
}
@Override
public int getItemCount() {
if (list.size() != 0){
return list.size();
}else{
return 0;
}
}
class MyViewHolder extends RecyclerView.ViewHolder{
private TextView name;
private TextView address;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.text_name);
address = itemView.findViewById(R.id.text_address);
}
}
}