Android 蓝牙连接,蓝牙配对,自动连接蓝牙
Posted 小狗蛋ing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 蓝牙连接,蓝牙配对,自动连接蓝牙相关的知识,希望对你有一定的参考价值。
趁热打铁,这篇文章写于刚写完蓝牙配对Demo,主要介绍配对蓝牙的具体编码步骤,开整!
首先上效果图,看一下是否符合读者现在的需求
主要核心代码没有想象中那么复杂,首先要去申请一下权限,不仅需要蓝牙权限,还需要位置权限哦
- 清单文件中
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
- 代码中动态获取,这里主要获取位置权限,目前蓝牙权限不需要动态申请,如果某年之后需要动态申请与位置权限相似添加上即可
/*动态申请权限操作*/
private boolean isPermissionRequested = false;
public void requestPermission()
if (Build.VERSION.SDK_INT >= 23 && !isPermissionRequested)
isPermissionRequested = true;
ArrayList<String> permissionsList = new ArrayList<>();
String[] permissions = //在这里加入你要使用的权限
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
;
for (String perm : permissions)
if (PackageManager.PERMISSION_GRANTED != checkSelfPermission(perm))
permissionsList.add(perm);
// 进入这里代表没有权限.
if (!permissionsList.isEmpty())
String[] strings = new String[permissionsList.size()];
requestPermissions(permissionsList.toArray(strings), 0);
权限就如入场券,有了权限才能大胆进行其他操作
蓝牙操作的主要核心都是围绕蓝牙设备适配器 BluetoothAdapter 来进行的,想要获取到蓝牙设备适配器,首先要先创建蓝牙设备管理器 BluetoothManager
BluetoothManager bluetoothmanger = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothadapter = bluetoothmanger.getAdapter();
拿到蓝牙设备适配器你就可以 “为所欲为” 了,具体怎么个任性法呢,通过这个适配器你可以判断当前设备是否支持蓝牙,可以判断当前设备蓝牙是否开启,可以开启关闭蓝牙,可以进行蓝牙搜索与取消搜索,等等…
具体表现在:
bluetoothadapter == null 当前设备不支持蓝牙,反之
bluetoothadapter.getName() 本机蓝牙名称
bluetoothadapter.getAddress() 本机蓝牙地址
bluetoothadapter.getBondedDevices() 获取当前设备蓝牙已经连接的设备信息
bluetoothadapter.isEnabled() 蓝牙是否开启
bluetoothadapter.enable() 开启蓝牙
bluetoothadapter.disable() 关闭蓝牙
bluetoothadapter.isDiscovering() 当前蓝牙是否正在进行搜索
bluetoothadapter.startDiscovery() 开启搜索附近蓝牙设备
bluetoothadapter.cancelDiscovery() 关闭搜索附近蓝牙设备
其实上面的几个方法就能完成前面的效果图功能了,当然还有当前设备已连接的数据和附近设备的数据呢,别急,他来了!
首先上述方法中的 bluetoothadapter.getBondedDevices() 方法为获取当前设备,他返回的是一个 Set 集合,其中的参数类型为 BluetoothDevice 字面意思为 蓝牙设备,这就已经明示了,这个集合装的是 一条条的设备信息,既然是设备信息,怎么获取到当前设备的名字和地址呢?
是的,就是这么直接, getName() 和 getAddress() 方法就能获取相应信息
以上是获取当前设备已连接信息,那怎么获取附近设备信息呢?
首先考虑的一点就是,要想设备与其他设备进行交流该用什么方式呢,你直接在代码里写方法,肯定是与其他设备联系不到的,这里就用到了广播,通过广播的形式去找各个设备的蓝牙信息,如果找到了就把他的蓝牙信息返回过来,我们拿到了蓝牙信息中的地址就能去相应的蓝牙设备进行交流,完结,撒花!
/**
*注释:
* 广播,寻找其他蓝牙设备
*/
private BroadcastReceiver searchDevices = new BroadcastReceiver()
public void onReceive(Context context, Intent intent)
String action = intent.getAction();
if (action.equals(BluetoothDevice.ACTION_FOUND)) //found device
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device.getName() != null)//没有名称时不添加
String str = "名称: "+device.getName() + " 地址:" + device.getAddress();
System.out.println("BlueTooth搜索到的设备:"+str);
//如果List中没有str元素则返回-1
if (myEveryList.indexOf(str) == -1)// 防止重复添加
myEveryList.add(device); // 获取设备名称和mac地址
else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED))
Toast.makeText(getBaseContext(), "正在扫描,请耐心等待", Toast.LENGTH_SHORT).show();
tv_now_search.setVisibility(View.VISIBLE);//显示等待标识
lv_every.setVisibility(View.GONE);//列表先隐藏掉
tv_fu.setText("附近的蓝牙设备("+myEveryList.size()+")");
else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED))
tv_now_search.setVisibility(View.GONE);//隐藏等待标识
lv_every.setVisibility(View.VISIBLE);//列表显示
Toast.makeText(getBaseContext(), "扫描完成,点击列表中的设备来尝试连接", Toast.LENGTH_SHORT).show();
tv_fu.setText("附近的蓝牙设备("+myEveryList.size()+")");
lv_every.setAdapter(new MyFuListAdapter(myEveryList));
;
以上就是蓝牙配对的编码过程,下面介绍一下如何进行蓝牙配对与取消配对,以上操作的基础都是你要有对应蓝牙设备信息,就是上述的BluetoothDevice
蓝牙配对:
Method method = BluetoothDevice.class.getMethod("createBond");
method.invoke(myEveryList.get(i));//这里面的参数就是BluetoothDevice
取消配对
Method method = BluetoothDevice.class.getMethod("removeBond");
method.invoke(myNowList.get(i));//这里面的参数就是BluetoothDevice
好了,将上述文章的相关方法拼凑起来就构成了从 开启关闭蓝牙、搜索蓝牙设备、进行设备连接、进行取消连接的一条龙操作。
源码也发布到资源里面去了, 1 C币下载! 壹 C币下载! 下载地址
以上是关于Android 蓝牙连接,蓝牙配对,自动连接蓝牙的主要内容,如果未能解决你的问题,请参考以下文章