Android --- Bluetooth(基础蓝牙)

蓝牙简介

蓝牙(Bluetooth)是一种短距离的无线通信技术标准。这个名子来源于10世纪丹麦国王
Harald Blatand,英文名子是Harold Bluetooth。在无线行业协会组织人员的讨论后,有人
认为用Blatand国王的名字命名这种无线技术是再好不过了,这是因为Blatand国王将挪威、瑞
典和丹麦统一起来,这就如同这项技术将统一无线通信领域一样。至此,蓝牙的名字也就这样
定了下来。
蓝牙协议分为4层,即核心协议层、电缆替代协议层、电话控制协议层和采纳的其它协议层。
这4种协议中最重要的是核心协议。蓝牙的核心协议包括基带、链路管理、逻辑链路控制和适
应协议四部分。其中链路管理(LMP)负责蓝牙组件间连接的建立。逻辑链路控制与适应协议
(L2CAP)位于基带协议层上,属于数据链路层,是一个为高层传输和应用层协议屏蔽基带协
议的适配协议。

Android提供蓝牙API来执行这些不同的操作。
1. 开关蓝牙
2. 扫描其他蓝牙设备
3. 获取配对设备列表
4. 连接到通过服务发现其他设备

蓝牙管理

private BluetoothAdapter bluetoothAdapter;
//获取管理器
bluetoothAdapter= BluetoothAdapter.getDefaultAdapter();

//打开蓝牙
bluetoothAdapter.enable();

//关闭蓝牙
bluetoothAdapter.disable();

//需要的权限
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

//扫描设备
bluetoothAdapter.startDiscovery();

扫描的设备信息会通过广播的形式发上来,所以需要拦截 BluetoothDevice.ACTION_FOUND

class BluetoothReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 从 Intent 中获取搜索到的设备对象
        BluetoothDevice dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        Log.e("m_tag","receiv:"+dev.getName());
        adapter.addDev(dev);
    }
}

protected void onResume() {
    super.onResume();
    receiver = new BluetoothReceiver();
    IntentFilter filter = new IntentFilter();
    // 当搜索发现设备时发送的 action
    filter.addAction(BluetoothDevice.ACTION_FOUND);
    registerReceiver(receiver, filter);
    Log.e("m_tag","regist");
}

取消搜索

bluetoothAdapter.cancelDiscovery();
蓝牙搜索问题

基本权限

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Android6.0之后需要添加android.permission.ACCESSCOARSELOCATION模糊位置权限, 并且该权限需要动态申请
//搜索方法
if (bluetoothAdapter.isEnabled()) {
    if (Build.VERSION.SDK_INT >= 23) {
        //检测权限
        int code = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);
        if (code != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_LOCATION_PERMISSION);
        }else{
            bluetoothAdapter.startDiscovery();
        }
    } else {
        bluetoothAdapter.startDiscovery();
    }
}

通讯过程

服务端:

//基于通讯序列号创建ServerSocket
BluetoothServerSocket serverSocket = bluetoothAdapter.listenUsingRfcommWithServiceRecord("btspp", uuid);
BluetoothSocket socket = serverSocket.accept();
//输入输出
socket.getInputStream();
socket.getOutputStream();

客户端:

BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
//连接
socket.connect();
输入输出
socket.getInputStream();
socket.getOutputStream();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值