Android 蓝牙API详解和连接使用 |
您所在的位置:网站首页 › 蓝牙配对是啥东西 › Android 蓝牙API详解和连接使用 |
1.蓝牙开发有两个主要的API BuletoothAdapter:本地蓝牙的适配器,也就是说当前应用程序所运行的Android设备上的蓝牙 BuletoothDevice : 远程的蓝牙适配器,也就是说你要连接的Android设备的适配器。 2.蓝牙权限 : android.permission.BLUETOOTH : 允许程序连接到已配对的蓝牙设备, 请求连接/接收连接/传输数据需要改权限, 主要用于对配对后进行操作; android.permission.BLUETOOTH_ADMIN : 允许程序发现和配对蓝牙设备, 该权限用来管理蓝牙设备, 有了这个权限, 应用才能使用本机的蓝牙设备, 主要用于对配对前的操作; 优先级 : BLUETOOTH权限是BLUETOOTH_ADMIN权限的前提, 如果没有BLUETOOTH权限, 就不能使用BLUETOOTH_ADMIN权限; 3.蓝牙状态值: 蓝牙关闭 : int STATE_OFF , 值为10, 蓝牙模块处于关闭状态; 蓝牙打开中 : int STATE_TURNING_ON , 值为11, 蓝牙模块正在打开; 蓝牙开启 : int STATE_ON , 值为12, 蓝牙模块处于开启状态; 蓝牙开启中 : int STATE_TURNING_OFF , 值为13, 蓝牙模块正在关闭; 4.蓝牙相关的广播: 开关状态改变: BluetoothAdapter.ACTION_STATE_CHANGE: 可以通过intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)获取当前蓝牙改变的状态。 搜索到附近可用设备: BluetoothDevice.ACTION_FOUND: 可以通过intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 获取当前搜索到的远程设备。 配对请求: BluetoothDevice.ACTION_PAIRING_REQUEST 5.常用方法: BluetoothAdapter mAdapter = BluetoothAdapter.getDefaultAdapter(); //获取本地蓝牙实例 开始 / 停止 扫描附近的设备: mAdapter.startDiscovery(); 获取蓝牙基本信息: MAC地址:mAdapter.getAddress(); 名称: mAdapter.getName(); 6.使用方法 6.1配置权限 6.2主要的使用方法,使用到有序广播 // 检查当前手机是否支持ble 蓝牙,如果不支持退出程序 if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { Log.e("=======开始进来=======", "检查当前手机不支持蓝牙"); Toast.makeText(this, "检查当前手机不支持蓝牙", Toast.LENGTH_SHORT).show(); finish(); } // 初始化 Bluetooth adapter, 通过蓝牙管理器得到一个参考蓝牙适配器(API必须在以上android4.3或以上和版本) final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); mBluetoothAdapter = bluetoothManager.getAdapter(); // 检查设备上是否支持蓝牙 if (mBluetoothAdapter == null) { Log.e("=======开始进来=======", "mBluetoothAdapter=" + mBluetoothAdapter); Toast.makeText(this, "检查当前手机不支持蓝牙", Toast.LENGTH_SHORT).show(); finish(); return; } @Override public void onReceive(Context context, Intent intent) { action = intent.getAction(); //得到action Log.e("===action:===", "[" + action + "]"); if (intent.getAction().equals(BluetoothDevice.ACTION_FOUND)) { // 从Intent中获取设备对象 btDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Log.e("===发现设备:===", "[" + btDevice.getName() + "]" + ":" + btDevice.getAddress()); if (mLDevices.size() == 0 && !btDevice.getName().equals("null")) mLDevices.add(btDevice); else if (!mLDevices.contains(btDevice) && btDevice.getName() != null) mLDevices.add(btDevice); if (mLDevices.size() == 0) { rl_fail.setVisibility(View.VISIBLE); } else { pairingKey = String.valueOf(intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_KEY, BluetoothDevice.ERROR)); rl_success.setVisibility(View.VISIBLE); loadData(); } } else if (intent.getAction().equals(BluetoothDevice.ACTION_FOUND)) { sePairingRequest(btDevice); } } private void setFound(BluetoothDevice bDevice) { /** * 发现设备 */ if (BluetoothDevice.ACTION_FOUND.equals(action)) { Log.e("===发现设备:===", "[" + bDevice.getName() + "]" + ":" + bDevice.getAddress()); /** * 设备如果有多个,第一个搜到的那个会被尝试。 */ if (bDevice.getName() != null && bDevice.getName().contains(BLUETOOTHNAME)) { if (bDevice.getBondState() == BluetoothDevice.BOND_NONE) { Log.e("===ywq===", "attemp to bond:" + "[" + bDevice.getName() + "]"); try { //通过工具类ClsUtils,调用createBond方法 btDevice = bDevice; ClsUtils.createBond(bDevice.getClass(), bDevice); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } else Log.e("===error===", "Is faild"); } } private void sePairingRequest(BluetoothDevice bDevice) { if (action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) { //再次得到的action,会等于PAIRING_REQUEST Log.e("===action2===", action); if (bDevice.getName().contains("iPhone")) { Log.e("===here===", "OKOKOK"); try { //1.确认配对 ClsUtils.setPairingConfirmation(bDevice.getClass(), bDevice, true); //2.调用setPin方法进行配对... boolean ret = ClsUtils.setPin(bDevice.getClass(), bDevice, String.valueOf(pairingKey)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } else Log.e("提示信息===", "这个设备不是目标蓝牙设备"); } }Demo下载地址:https://download.csdn.net/download/qq_39735504/10324973 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |