android -------- 蓝牙Bluetooth

原创 2018年04月16日 15:22:47

什么是蓝牙?

也可以说是蓝牙技术。所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的。利用“蓝牙”技术,能够有效地简化掌上电脑、笔记本电脑和移动电话手机等移动通信终端设备之间的通信,也能够成功地简化以上这些设备与因特网Internet之间的通信,从而使这些现代通信设备与因特网之间的数据传输变得更加迅速高效,为无线通信拓宽道路。

 

Android 4.3(API Level 18)开始引入Bluetooth Low Energy(BLE,低功耗蓝牙)的核心功能并提供了相应的 API, 应用程序通过这些 API 扫描蓝牙设备、查询 services、读写设备的 characteristics(属性特征)等操作。

Android BLE 使用的蓝牙协议是 GATT 协议,有关该协议的详细内容可以参见蓝牙官方文档。以下我引用一张官网的图来大概说明 Android 开发中我们需要了解的一些 Bluetooth Low Energy 的专业术语。

 

 

Android提供BluetoothAdapter类蓝牙通信。通过调用创建的对象的静态方法getDefaultAdapter()。其语法如下给出。

 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

首先需要AndroidManifest.xml文件中添加操作蓝牙的权限。

<!--需要此权限来执行任何蓝牙通信,如请求一个连接、接受一个连接和传输数据。-->
    <uses-permission android:name="android.permission.BLUETOOTH"/>
   <!-- //如果你想让你的应用启动设备发现或操纵蓝牙设置,必须申报bluetooth_admin许可-->
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

验证蓝牙是否开启,未开启的提示开启
if (!mBluetoothAdapter.isEnabled()){
      //弹出对话框提示用户是后打开
      Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
      startActivityForResult(enabler, REQUEST_ENABLE);
            
   }

Activity代码:


/**
 * Created by zhangqie on 2017/11/28.
 */

public class BluetoothActivity extends AppCompatActivity implements View.OnClickListener{


    private static final int REQUEST_ENABLE = 1;

    private static final String TAG = Demo1Activity.class.getName();


    BluetoothAdapter mBluetoothAdapter;

    TextView tvDevices;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.demo1);
        initView();
    }

    private void initView(){

        findViewById(R.id.btn1).setOnClickListener(this);
        tvDevices = (TextView) findViewById(R.id.textblue);

        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

        if (!mBluetoothAdapter.isEnabled()){
            //弹出对话框提示用户是后打开
            Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enabler, REQUEST_ENABLE);
            //不做提示,直接打开,不建议用下面的方法,有的手机会有问题。
            // mBluetoothAdapter.enable();
         }

        showBluetooth();

    }

    private void startSearthBltDevice() {
        //如果当前在搜索,就先取消搜索
        if (mBluetoothAdapter.isDiscovering()) {
            mBluetoothAdapter.cancelDiscovery();
        }
        //开启搜索
        mBluetoothAdapter.startDiscovery();
    }


    private void showBoradCast(){
        // 设置广播信息过滤
        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothDevice.ACTION_FOUND);//每搜索到一个设备就会发送一个该广播
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//当全部搜索完后发送该广播
        filter.setPriority(Integer.MAX_VALUE);//设置优先级
        // 注册蓝牙搜索广播接收者,接收并处理搜索结果
        this.registerReceiver(receiver, filter);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn1:
                showBoradCast();
                startSearthBltDevice();
                break;
        }
    }

    //获取已经配对的蓝牙设备
    private void showBluetooth(){
        Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
        if (pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
                tvDevices.append(device.getName() + ":" + device.getAddress());
            }
        }
    }


    /**
     * 定义广播接收器
     */
    private final BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
                    Log.i(TAG, ":"+ device.getAddress());
                    tvDevices.append(device.getName() + ":"+ device.getAddress());
                }
            } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {

                Toast.makeText(Demo1Activity.this,"已搜索完成",Toast.LENGTH_LONG).show();

                //已搜素完成
            }
        }
    };

}


得到效果图:

   


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DickyQie/article/details/79961108

ANDROID的 BLUETOOTH 实现机制与架构

从ANDROID3.0开始,BLUETOOTH  API提供了Bluetooth profile协议的支持。目前ANDROID4.0的蓝牙API提供了五种蓝牙无线接口规范(Bluetooth prof...
  • pashanhu6402
  • pashanhu6402
  • 2016-11-30 10:02:53
  • 1805

Android bluetooth介绍(二): android 蓝牙代码架构及其uart 到rfcomm流程

关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP RFCOMM  版本:基于android4.2之前版本 bluez内核:linux/linux3.08系统:and...
  • xubin341719
  • xubin341719
  • 2014-08-12 20:01:20
  • 26495

Android 7.0 bluetooth introduction

Android提供了一个默认的蓝牙协议栈-BlueDroid,其被分为蓝牙嵌入式系统(BTE)和蓝牙应用(BTA)两层。BTE实现了蓝牙规格的核心功能,BTA实现了与Android框架层的通信。 蓝...
  • hzt1993
  • hzt1993
  • 2017-08-30 18:23:07
  • 398

Android系统蓝牙HAL分析

关键词:android, 蓝牙,中间件,驱动 应用层API Android中为蓝牙的使用提供了一整套API:  搜索其他蓝牙设备。查询适配设备。建立RFCOMM通道。 通...
  • cutter2002
  • cutter2002
  • 2017-03-19 14:35:46
  • 1025

Android开发之蓝牙(Bluetooth)---源码目录

一 Bluetooth 的设置应用    packages\apps\Settings\src\com\android\settings\bluetooth\*    蓝牙设置应用及设置参数,蓝牙...
  • u014320421
  • u014320421
  • 2016-11-01 13:29:50
  • 1643

Android Studio修改蓝牙权限 出现 Bluetooth binder is null

1、在此目录下 2、此处  添加: uses-permission android:name="android.permission.BLUETOOTH"/> uses-permiss...
  • Chamico
  • Chamico
  • 2018-02-03 15:19:52
  • 130

深入了解Android蓝牙Bluetooth——《基础篇》

什么是蓝牙?  也可以说是蓝牙技术。所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的。利用“蓝牙”技术,能够有效地简化掌上电脑、笔记本电脑和移动电话手机等移动...
  • androidstarjack
  • androidstarjack
  • 2017-03-05 16:24:17
  • 8829

深入了解Android蓝牙Bluetooth ——《总结篇》

在我的上两篇博文中讲解了有关android蓝牙的认识以及API的相关的介绍,蓝牙BLE的搜索,连接以及读取。 没有了解的童鞋们请参考: * 深入了解Android蓝牙Bluetooth——《基础篇...
  • androidstarjack
  • androidstarjack
  • 2017-03-07 22:35:24
  • 6912

Android bluetooth开发实践

之前我写过一篇文章,Android Socket编程实践,讲解了如何通过ServerSocket和Socket实现局域网通信,但当时的通信环境是WIFI条件下。其实Android从2.0版本的sdk开...
  • huaxun66
  • huaxun66
  • 2016-12-08 13:21:07
  • 1395

android4.4 bluetooth 配置文件分析

1. 在android4sam_v4.4/device/atmel/sama5d4/BoardConfig.mk里面指定bluetooth的配置文件所在路径: BOARD_BLUETOOTH_BDR...
  • chengde6896383
  • chengde6896383
  • 2017-03-07 19:02:57
  • 642
收藏助手
不良信息举报
您举报文章:android -------- 蓝牙Bluetooth
举报原因:
原因补充:

(最多只允许输入30个字)