>

PI定制版本)版本Linux系统,1澳门博发娱乐官网

- 编辑:澳门博发娱乐官网 -

PI定制版本)版本Linux系统,1澳门博发娱乐官网

LINKS

[1].Cannot connect to BLE device on Raspberry Pi
[2].Invalid file descriptor gatttool of bluez 5.32
[3].Get Started with Bluetooth Low Energy on Linux
[4].Reverse Engineering a Bluetooth Low Energy Light Bulb
[5].Doing Bluetooth Low Energy on Linux
[6].Tutorial: BLE Pairing the Raspberry Pi 3 Model B with Hexiwear

澳门博发娱乐官网 1

@beautifulzzzz
智能硬件、物联网,热爱技术,关注产品
博客:http://blog.beautifulzzzz.com
园友交流群:414948975

Unity Download

Provides classes that manage Bluetooth functionality, such as scanning for devices, connecting with devices, and managing data transfer between devices. The Bluetooth API supports both "Classic Bluetooth" and Bluetooth Low Energy.

Closing the Client App

安装Wordpress

1、 安装Wordpress此前的操作:退换Micro SD卡的Linux数据分区的上空

fdisk /dev/mmcblk0

键入“p”查看当前的分区情形;
先键入“d”再键入“2”删除当前的数码分区;
各样键入“n”“p”“2”创立新的数量分区,小编利用的2016-03-12本子的Minibian是从125056起头的分区,这里要留意一下;
键入“w”写入分区表。

分区生效供给选拔“reboot”重启大麦泡派。
启航后键入“resize2fs /dev/mmcblk0p2”命令才算完成。
采用“df -h”查看一下改观后的分区情状。
利用“dpkg-reconfigure tzdata”命令改造时区。

2、 更新系统

apt-get update
apt-get upgrade
apt-get dist-upgrade
apt-get install nano

这里有人推荐修改/etc/apt/sources.list这一个文件,修改Minibian的源,因为官方的“deb http://mirrordirector.raspbian.org/raspbian jessie main firmware non-free”和“deb http://archive.raspberrypi.org/debian jessie main”那多少个源太慢,小编试了多少个网络给的源,要么版本不对,要么已经失效了,因为急需革新的东西相当的少,笔者依旧使用官方的源。

附上自个儿的/etc/apt/sources.list文件:

deb http://archive.raspbian.org/raspbian jessie main contrib non-free
deb-src http://archive.raspbian.org/raspbian jessie main contrib non-free
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ jessie main non-free contrib
deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ jessie main non-free contrib
deb http://mirrordirector.raspbian.org/raspbian jessie main firmware non-free
deb http://archive.raspberrypi.org/debian jessie main

3、安装Apache网址服务器

apt-get install apache2 –y

成功后方可在Computer上的浏览器地址栏输入“http://localhost”大概用“hostname -I”获得的IP地址测量试验。

4、安装PHP

apt-get install php5 libapache2-mod-php5 php5-gd –y

5、安装MySQL

apt-get install mysql-server php5-mysql –y

此地会供给输入数据库管理员的口令,不要忘了!
重启Apache服务:

service apache2 restart

6、安装Wordpress
下载Wordpress。 Wordpress官网:https://wordpress.org/ 查看下载链接地址:https://wordpress.org/latest.tar.gz

cd /var/www/html/
rm *
wget https://wordpress.org/latest.tar.gz

解压缩安装

tar xzf wordpress.org/latest.tar.gz
mv wordpress/* .
rm wordpress.org/latest.tar.gz
chown -R www-data

创建Wordpress数据库

mysql -uroot –p'password'
mysql> create database wordpress;
mysql> quit
service apache2 restart

Wordpress初始化http://YOUR-IP-ADDRESS,点击“Let's go!” 。

澳门博发娱乐官网 2

Wordpress起头化分界面(依版本和语种分化只怕两样)

澳门博发娱乐官网 3

填入相应的内容后,点击“提交”,在随着的页面中式茶食击“安装”

7、安装花生壳
花生壳官方网站下载页:http://hsk.oray.com/download/

wget http://hsk.oray.com/download/download?id=25
tar zxvf phddns_raspberry.tgz
cd phddns2
./oraynewph start
oraynewph status

在运作后回到的开始和结果中找到“SN:RAPIxxxxxxxxxxxxxxxxx”类似的SN码,在浏览器地址栏输入:http://b.oray.com

客户名是SN码,初步口令是“admin”

签到后就能够展开花生壳的内网地址映射的装置了。万一您忘掉了友好的花生壳登入音信,用那些命令:

oraynewph reset

澳门博发娱乐官网 4

安不忘危参谋的图书,贯虱穿杨,样样稀松,只引用小白购买

星期三, 05. 九月 2018 02:03上午 - beautifulzzzz

The importance of fine-grained GPU preemption support for VR

For more information about Classic Bluetooth, see the Bluetooth guide. For more information about Bluetooth Low Energy, see the Bluetooth Low Energy (BLE) guide.

Reading BLE Attributes

读取BLE属性

Once your Android app has connected to a GATT server and discovered services, it can read and write attributes, where supported. For example, this snippet iterates through the server's services and characteristics and displays them in the UI:
一经您的Android应用连接到GATT服务器并发现了劳动,倘诺GATT服务器帮助,它就可以读取和写入属性了。举个例子:这一片段代码遍历了这一个服务器的劳务和特征,,并将其出示在UI中:

public class DeviceControlActivity extends Activity {
    ...
    // Demonstrates how to iterate through the supported GATT
    // Services/Characteristics.
    // In this sample, we populate the data structure that is bound to the
    // ExpandableListView on the UI.
    private void displayGattServices(List<BluetoothGattService> gattServices) {
        if (gattServices == null) return;
        String uuid = null;
        String unknownServiceString = getResources().
                getString(R.string.unknown_service);
        String unknownCharaString = getResources().
                getString(R.string.unknown_characteristic);
        ArrayList<HashMap<String, String>> gattServiceData =
                new ArrayList<HashMap<String, String>>();
        ArrayList<ArrayList<HashMap<String, String>>> gattCharacteristicData
                = new ArrayList<ArrayList<HashMap<String, String>>>();
        mGattCharacteristics =
                new ArrayList<ArrayList<BluetoothGattCharacteristic>>();

        // Loops through available GATT Services.
        for (BluetoothGattService gattService : gattServices) {
            HashMap<String, String> currentServiceData =
                    new HashMap<String, String>();
            uuid = gattService.getUuid().toString();
            currentServiceData.put(
                    LIST_NAME, SampleGattAttributes.
                            lookup(uuid, unknownServiceString));
            currentServiceData.put(LIST_UUID, uuid);
            gattServiceData.add(currentServiceData);

            ArrayList<HashMap<String, String>> gattCharacteristicGroupData =
                    new ArrayList<HashMap<String, String>>();
            List<BluetoothGattCharacteristic> gattCharacteristics =
                    gattService.getCharacteristics();
            ArrayList<BluetoothGattCharacteristic> charas =
                    new ArrayList<BluetoothGattCharacteristic>();
           // Loops through available Characteristics.
            for (BluetoothGattCharacteristic gattCharacteristic :
                    gattCharacteristics) {
                charas.add(gattCharacteristic);
                HashMap<String, String> currentCharaData =
                        new HashMap<String, String>();
                uuid = gattCharacteristic.getUuid().toString();
                currentCharaData.put(
                        LIST_NAME, SampleGattAttributes.lookup(uuid,
                                unknownCharaString));
                currentCharaData.put(LIST_UUID, uuid);
                gattCharacteristicGroupData.add(currentCharaData);
            }
            mGattCharacteristics.add(charas);
            gattCharacteristicData.add(gattCharacteristicGroupData);
         }
    ...
    }
...
}

安装操作系统

安装Minibian的步子(以安装了Microsoft Windows 10 X64的微处理器作为增派平台):
1、准备四个Micro SD读取卡,体量在16GB至64GB之间就可以,速度越快越好;
2、将Micro TF存款和储蓄卡以FAT格式化;
3、将下载的“二零一四-03-12-jessie-minibian.tar.gz”解压缩;
4、使用Win32 Disk Imager(链接地址:https://sourceforge.net/projects/win32diskimager/)将解压得到的“二零一五-03-12-jessie-minibian.img”文件写入Micro CF闪存卡;
5、将写有Minibian系统的Micro CF卡放入悬钩子派的Micro CF存储卡槽(Micro SD Card Slot);
6、高脚波派加电开机,Minibian的客商名称为“root”,最早密码为“raspberry”(记得登入后先是件事正是利用“passwd root”命令修改root顾客的密码)。

纯属记得:修改root客户的密码,修改root客商的密码,修改root客商的密码!

2、gatttool —— 老工具趟坑

刚开始跟着 Get Started with Bluetooth Low Energy on Linux 操作gatttool,开采坑太多(主因是工具老了):

采用sudo gatttool -b 4D:69:98:0E:91:5E -I去连接
开掘会报错:Error: connect error: Connection refused (111)
终极参谋LINK-11开掘供给加random选项([#1](https://stackoverflow.com/questions/32947807/cannot-connect-to-ble-device-on-raspberry-pi))

➜  ~  sudo gatttool -b 4D:69:98:0E:91:5E -I
[4D:69:98:0E:91:5E][LE]> connect
Attempting to connect to 4D:69:98:0E:91:5E
Error: connect error: Connection refused (111)
[4D:69:98:0E:91:5E][LE]> exit
➜  ~  sudo gatttool  -t random  -b 4D:69:98:0E:91:5E -I
[4D:69:98:0E:91:5E][LE]> connect
Attempting to connect to 4D:69:98:0E:91:5E
Connection successful
[4D:69:98:0E:91:5E][LE]> 
(gatttool:3104): GLib-WARNING **: Invalid file descriptor.

过三遍会10S自行断开,网络说这么些工具老了,不提议用了([#2](https://www.spinics.net/lists/linux-bluetooth/msg67617.html)):

There are new tools to use with GATT, bluetoothctl/bluetoothd is the preferred since with that you have GAP, etc, 
but if want to use a stand alone tool then I suggest you use btgatt-client.

澳门博发娱乐官网 5

Nordic SDK and Documentation

To perform Bluetooth communication using these APIs, an application must declare the BLUETOOTH permission. Some additional functionality, such as requesting device discovery, also requires the BLUETOOTH_ADMIN permission.

Finding BLE Devices

寻找BLE设备

To find BLE devices, you use the startLeScan() method. This method takes a BluetoothAdapter.LeScanCallback as a parameter. You must implement this callback, because that is how scan results are returned. Because scanning is battery-intensive, you should observe the following guidelines:
要物色BLE设备,你能够行使startLeScan()方法。那几个艺术满含贰个Bluetooth( Bluetooth® )Adapter.LeScanCallback作为参数。你不能够不要完结那么些回调,因为那是怎样回到扫描结果的(因为扫描结果是经过这一个再次来到的)。因为扫描是电瓶密集型的,你必要遵照以下的清规戒律:

  • As soon as you find the desired device, stop scanning.
    只要你一找到了想要的道具,就停下扫描
  • Never scan on a loop, and set a time limit on your scan. A device that was previously available may have moved out of range, and continuing to scan drains the battery.
    切勿在循环里扫描,且要安装二个扫描时限。 贰个从前可以博得的器材或许已经移出了限制,持续围观消功耗瓶。

The following snippet shows how to start and stop a scan:
上面包车型大巴代码片段体现了怎么着开首和甘休扫描:

/**
 * Activity for scanning and displaying available BLE devices.
 */
public class DeviceScanActivity extends ListActivity {

    private BluetoothAdapter mBluetoothAdapter;
    private boolean mScanning;
    private Handler mHandler;

    // Stops scanning after 10 seconds.
    private static final long SCAN_PERIOD = 10000;
    ...
    private void scanLeDevice(final boolean enable) {
        if (enable) {
            // Stops scanning after a pre-defined scan period.
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mScanning = false;
                    mBluetoothAdapter.stopLeScan(mLeScanCallback);
                }
            }, SCAN_PERIOD);

            mScanning = true;
            mBluetoothAdapter.startLeScan(mLeScanCallback);
        } else {
            mScanning = false;
            mBluetoothAdapter.stopLeScan(mLeScanCallback);
        }
        ...
    }
...
}

If you want to scan for only specific types of peripherals, you can instead call startLeScan(UUID[], BluetoothAdapter.LeScanCallback), providing an array of UUID objects that specify the GATT services your app supports.
万一您想扫描特定项指标外设,你能够轮换调用startLeScan(UUID[], BluetoothAdapter.LeScanCallback),提供八个一定的您的app支持的GATT服务UUID设备数组。

Here is an implementation of the BluetoothAdapter.LeScanCallback, which is the interface used to deliver BLE scan results:
此间有三个蓝牙( Bluetooth® )Adapter.LeScanCallback的落到实处,它是八个接口,用来传输BLE扫描结果:

private LeDeviceListAdapter mLeDeviceListAdapter;
...
// Device scan callback.
private BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, int rssi,
            byte[] scanRecord) {
        runOnUiThread(new Runnable() {
           @Override
           public void run() {
               mLeDeviceListAdapter.addDevice(device);
               mLeDeviceListAdapter.notifyDataSetChanged();
           }
       });
   }
};

Note: You can only scan for Bluetooth LE devices or scan for Classic Bluetooth devices, as described in Bluetooth. You cannot scan for both Bluetooth LE and classic devices at the same time.

注意:你能够扫描低功耗Bluetooth设备或特出Bluetooth设备,如蓝牙( Bluetooth® )所述。你不能够而且扫视低功耗蓝牙( Bluetooth® )设备和经文Bluetooth设备。

前言

近年来学习Linux相关的事物,在这之中一个思路是看书时用surface上的SSH连接Linux主机实验。先是以为台式机功耗大、噪音大,后来台式机Computer也认为功耗大、噪音大。于是就悟出了托盘派,Google查了一下后理解今后已经是二零一四年十二月生产的Raspberry Pi 3 Model B型号了。

切切实实技艺参数:

1.2GHz 64-bit quad-core ARMv8 CPU
802.11n Wireless LAN
1GB RAM
4 USB ports/40 GPIO pins/Full HDMI port/Ethernet port
Bluetooth 4.1/Bluetooth Low Energy (BLE)
Combined 3.5mm audio jack and composite video
Camera interface (CSI)
Display interface (DSI)
Micro SD card slot (now push-pull rather than push-push)
VideoCore IV 3D graphics core

澳门博发娱乐官网 6

Raspberry Pi 3 Model B 布局图

澳门博发娱乐官网 7

Raspberry Pi 3 Model B 实物图

澳门博发娱乐官网 8

天猫商城购物到货图

澳门博发娱乐官网 9

设置好外壳图

此前方的技能参数知道木莓派CPU是1.2GHz 64-bit quad-core ARMv8,所以要设置特意为ARM管理器编写翻译的Linux操作系统。先是安装了合法的Raspbian 杰西(Debian 8 杰西的Raspberry PI定制版本)版本Linux系统,但因为是用以学习Linux命令和Wordpress服务器,这一个本子里剩余的东西太多了。后来可比了各个Raspberry PI的Linux版本,选用了Minibian那一个系统(当然也是杰西版本了)。

松木丛派官方网站(Raspbian 杰西):http://www.raspbian.org

Minibian官网(Raspbian 杰西二零一五年11月二十14日版本):https://minibianpi.wordpress.com/

澳门博发娱乐官网 10

Minibian系统运转截图

3、bluetoothctl——NB的新工具

一声令下行步向bluetoothctl操作意况([#6](https://mcuoneclipse.com/2016/12/19/tutorial-ble-pairing-the-raspberry-pi-3-model-b-with-hexiwear/))

bluetoothctl

自个儿在手提式有线电电话机上用lightblue模拟一个BLE设备ty_prod,之后对其service实行更换,调用scan on进行查找依然老的,
最终开采要先用remove移除从前的装置,之后再scan就能够产出[NEW] Device 72:3B:E1:81:4E:4F ty_prod设备
注: 用lightblue模拟的设施的MAC不是永世的
注: 笔者发觉在lightblue中不管怎么模拟BLE设备,一旦被连上寻觅到的service都以IPone的

[bluetooth]# devices
Device 28:ED:6A:A0:26:B7 ty_prod
Device 58:71:33:00:00:24 Bluetooth Keyboard
Device 00:1A:7D:DA:71:0A SHEN-PC
Device 94:87:E0:B3:AC:6F Mi Phone
[bluetooth]# remove 28:ED:6A:A0:26:B7 
...
[bluetooth]# scan on
Discovery started
[NEW] Device 72:3B:E1:81:4E:4F ty_prod
[bluetooth]# scan off
...
Discovery stopped
[bluetooth]# connect 72:3B:E1:81:4E:4F
Attempting to connect to 72:3B:E1:81:4E:4F
[CHG] Device 72:3B:E1:81:4E:4F Connected: yes
Connection successful
[ty_prod]

干脆就用苹果手提式有线电话机自带的劳务做测量检验了~

[ty_prod]# info
Device 28:ED:6A:A0:26:B7 (public)
    Name: tuya_mdev_test
    Alias: tuya_mdev_test
    Appearance: 0x0040
    Icon: phone
    Paired: yes
    Trusted: no
    Blocked: no
    Connected: yes
    LegacyPairing: no
    UUID: Fax                       (00001111-0000-1000-8000-00805f9b34fb)
    UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
    UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
    UUID: Current Time Service      (00001805-0000-1000-8000-00805f9b34fb)
    UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
    UUID: Battery Service           (0000180f-0000-1000-8000-00805f9b34fb)
    UUID: Vendor specific           (7905f431-b5ce-4e99-a40f-4b1e122d00d0)
    UUID: Vendor specific           (89d3502b-0f36-433a-8ef4-c502ad55f8dc)
    UUID: Vendor specific           (9fa480e0-4967-4542-9390-d343dc5d04ae)
    UUID: Vendor specific           (d0611e78-bbb4-4591-a5f8-487910ae4366)
[CHG] Device 28:ED:6A:A0:26:B7 ServicesResolved: no
[CHG] Device 28:ED:6A:A0:26:B7 Connected: no

小编们用Current Time Service,列出富有attributes操作如下:

[tuya_mdev_test]# menu gatt
[tuya_mdev_test]# list-attributes 28:ED:6A:A0:26:B7
...
Primary Service
    /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041
    00001805-0000-1000-8000-00805f9b34fb
    Current Time Service
Characteristic
    /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0045
    00002a0f-0000-1000-8000-00805f9b34fb
    Local Time Information
Characteristic
    /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042
    00002a2b-0000-1000-8000-00805f9b34fb
    Current Time
Descriptor
    /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042/desc0044
    00002902-0000-1000-8000-00805f9b34fb
    Client Characteristic Configuration
...

上面Current Time Service对应的服务如下图:

澳门博发娱乐官网 11

咱俩挑选Current Time举办操作UUID:0x2A2B

[ty_prod]# select-attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042
[tuya_mdev_test:/service0041/char0042]# read
Attempting to read /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042
[CHG] Attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042 Value:
  e2 07 09 05 01 24 11 03 f1 02                    .....$....      
  e2 07 09 05 01 24 11 03 f1 02                    .....$.... 
[tuya_mdev_test:/service0041/char0042]# attribute-info
Characteristic - Current Time
    UUID: 00002a2b-0000-1000-8000-00805f9b34fb
    Service: /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041
    Value:
  e2 07 09 05 01 2e 01 03 f5 02                    ..........      
    Notifying: yes
    Flags: read
    Flags: notify

读出结果差不离意思应该是:2018-9/5-1:36:17 周三

读取一下0x180A的Device Information:

[tuya_mdev_test:/service0006/char0007]# select-attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a
[tuya_mdev_test:/service0047/char004a]# attribute-info
Characteristic - Model Number String
    UUID: 00002a24-0000-1000-8000-00805f9b34fb
    Service: /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047
    Flags: read
[tuya_mdev_test:/service0047/char004a]# read
Attempting to read /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a
[CHG] Attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a Value:
  69 50 68 6f 6e 65 36 2c 32                       iPhone6,2       
  69 50 68 6f 6e 65 36 2c 32                       iPhone6,2    

道理当然是那样的写、使能notify也非常粗略,看help就能够。最后断开连接、并脱离!!!

[tuya_mdev_test:/service0047/char004a]# disconnect 28:ED:6A:A0:26:B7
Attempting to disconnect from 28:ED:6A:A0:26:B7
[CHG] Device 28:ED:6A:A0:26:B7 ServicesResolved: no
Successful disconnected
[CHG] Device 28:ED:6A:A0:26:B7 Connected: no
[bluetooth]# quit

澳门博发娱乐官网 12

 

关于非常多任何的经文Bluetooth新闻。能够看Bluetooth指南。有关相当多其余的低耗能蓝牙5.0的音信,能够看BLE指南。

BLE 权限


In order to use Bluetooth features in your application, you must declare the Bluetooth permission BLUETOOTH. You need this permission to perform any Bluetooth communication, such as requesting a connection, accepting a connection, and transferring data.
为了在你的利用中利用蓝牙5.0特色,你无法不要证明蓝牙5.0权限 BLUETOOTH 。你要此权限技艺进行别的蓝牙( Bluetooth® )通信,如:央浼叁个接连,接收二个接连,和传输数据。

If you want your app to initiate device discovery or manipulate Bluetooth settings, you must also declare the BLUETOOTH_ADMIN permission. Note: If you use the BLUETOOTH_ADMIN permission, then you must also have the BLUETOOTH permission.
设若您想要你的app运营设备开采或决定蓝牙5.0设置,你必需也要注明BLUETOOTH_ADMIN 权限。注意:假使您用了 BLUETOOTH_ADMIN 权限,则还必需有 BLUETOOTH 权限。

Declare the Bluetooth permission(s) in your application manifest file. For example:
申明Bluetooth权限在您的选择manifest文件,譬喻:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

If you want to declare that your app is available to BLE-capable devices only, include the following in your app's manifest:
只要你想要注解你的app仅协助有BLE效用的设施,在您的app的manifest中填上如下内容:

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
However, if you want to make your app available to devices that don't support BLE, you should still include this element in your app's manifest, but set required="false". Then at run-time you can determine BLE availability by using PackageManager.hasSystemFeature():
接下来,假如您想要你的app能够被不协助BLE的装置得到,你依旧亟待包蕴那个成分在您的app的manifest文件中,可是,必要安装required为false。然后在您的代码运维时,你能够经过应用确认PackageManager.hasSystemFeature()方法来确认BLE是或不是可获得。

// Use this check to determine whether BLE is supported on the device. Then
// you can selectively disable BLE-related features.
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
    Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
    finish();
}

Note: LE Beacons are often associated with location. In order to use BluetoothLeScanner without a filter, you must request the user's permission by declaring either the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission in your app's manifest file. Without these permissions, scans won't return any results.

潜心:LE信标平常与岗位相关联。
为了在尚未过滤器的场地下利用蓝牙( Bluetooth® )LeScanner,您必得透过注脚应用程序的清单文件中的ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限来呼吁客户的权杖。

澳门博发娱乐官网 13

 

1.对此别的的蓝牙( Bluetooth® )设备的扫描(包罗BLE设备)

Connecting to a GATT Server

连接GATT服务器

The first step in interacting with a BLE device is connecting to it— more specifically, connecting to the GATT server on the device. To connect to a GATT server on a BLE device, you use the connectGatt() method. This method takes three parameters: a Context object, autoConnect (boolean indicating whether to automatically connect to the BLE device as soon as it becomes available), and a reference to a BluetoothGattCallback:
与BLE设备的互相的第一步是连接受它-更具体的说,连接在那几个BLE设备上的GATT服务器。为了连接上在那么些BLE设备上的GATT服务器,你能够利用connectGatt()方法。那一个办法有八个参数:贰个上下文对象,是还是不是自动三番五次(一个布尔值,表明只要这些BLE设备是可以赢得的,是还是不是自动的连接上它),三个指向BluetoothGattCallback的引用。

mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

This connects to the GATT server hosted by the BLE device, and returns a BluetoothGatt instance, which you can then use to conduct GATT client operations. The caller (the Android app) is the GATT client. The BluetoothGattCallback is used to deliver results to the client, such as connection status, as well as any further GATT client operations.
这会连接受由BLE设备处理的GATT服务器,并赶回两个BluetoothGatt实例,然后您能够行使它来进展GATT顾客端操作。调用者(Android app)是GATT客商端。蓝牙5.0GattCallback用来传送结果给顾客端,比如连接意况,以及别的进一步的GATT客户端操作。

In this example, the BLE app provides an activity (DeviceControlActivity) to connect, display data, and display GATT services and characteristics supported by the device. Based on user input, this activity communicates with a Service called BluetoothLeService, which interacts with the BLE device via the Android BLE API:
其一例子中,那些BLE应用提供叁个活动(DeviceControlActivity)用于连接装置,展现由器具提供的多寡,GATT服务和特征。基于顾客输入,这一个运动与一个名字为蓝牙( Bluetooth® )LeService的劳务通讯,该服务通过Android BLE API与BLE设备进行互相:

// A service that interacts with the BLE device via the Android BLE API.
public class BluetoothLeService extends Service {
    private final static String TAG = BluetoothLeService.class.getSimpleName();

    private BluetoothManager mBluetoothManager;
    private BluetoothAdapter mBluetoothAdapter;
    private String mBluetoothDeviceAddress;
    private BluetoothGatt mBluetoothGatt;
    private int mConnectionState = STATE_DISCONNECTED;

    private static final int STATE_DISCONNECTED = 0;
    private static final int STATE_CONNECTING = 1;
    private static final int STATE_CONNECTED = 2;

    public final static String ACTION_GATT_CONNECTED =
            "com.example.bluetooth.le.ACTION_GATT_CONNECTED";
    public final static String ACTION_GATT_DISCONNECTED =
            "com.example.bluetooth.le.ACTION_GATT_DISCONNECTED";
    public final static String ACTION_GATT_SERVICES_DISCOVERED =
            "com.example.bluetooth.le.ACTION_GATT_SERVICES_DISCOVERED";
    public final static String ACTION_DATA_AVAILABLE =
            "com.example.bluetooth.le.ACTION_DATA_AVAILABLE";
    public final static String EXTRA_DATA =
            "com.example.bluetooth.le.EXTRA_DATA";

    public final static UUID UUID_HEART_RATE_MEASUREMENT =
            UUID.fromString(SampleGattAttributes.HEART_RATE_MEASUREMENT);

    // Various callback methods defined by the BLE API.
    private final BluetoothGattCallback mGattCallback =
            new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status,
                int newState) {
            String intentAction;
            if (newState == BluetoothProfile.STATE_CONNECTED) {
                intentAction = ACTION_GATT_CONNECTED;
                mConnectionState = STATE_CONNECTED;
                broadcastUpdate(intentAction);
                Log.i(TAG, "Connected to GATT server.");
                Log.i(TAG, "Attempting to start service discovery:" +
                        mBluetoothGatt.discoverServices());

            } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                intentAction = ACTION_GATT_DISCONNECTED;
                mConnectionState = STATE_DISCONNECTED;
                Log.i(TAG, "Disconnected from GATT server.");
                broadcastUpdate(intentAction);
            }
        }

        @Override
        // New services discovered
        public void onServicesDiscovered(BluetoothGatt gatt, int status) {
            if (status == BluetoothGatt.GATT_SUCCESS) {
                broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED);
            } else {
                Log.w(TAG, "onServicesDiscovered received: " + status);
            }
        }

        @Override
        // Result of a characteristic read operation
        public void onCharacteristicRead(BluetoothGatt gatt,
                BluetoothGattCharacteristic characteristic,
                int status) {
            if (status == BluetoothGatt.GATT_SUCCESS) {
                broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
            }
        }
     ...
    };
...
}

When a particular callback is triggered, it calls the appropriate broadcastUpdate() helper method and passes it an action. Note that the data parsing in this section is performed in accordance with the Bluetooth Heart Rate Measurement profile specifications:
当特定的回调被触发时,它调用相应的broadcastUpdate()帮忙方法并传递二个动作。请小心,本节中的数据深入分析是基于蓝牙5.0心率测量配置文件规范实行的:

private void broadcastUpdate(final String action) {
    final Intent intent = new Intent(action);
    sendBroadcast(intent);
}

private void broadcastUpdate(final String action,
                             final BluetoothGattCharacteristic characteristic) {
    final Intent intent = new Intent(action);

    // This is special handling for the Heart Rate Measurement profile. Data
    // parsing is carried out as per profile specifications.
    if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) {
        int flag = characteristic.getProperties();
        int format = -1;
        if ((flag & 0x01) != 0) {
            format = BluetoothGattCharacteristic.FORMAT_UINT16;
            Log.d(TAG, "Heart rate format UINT16.");
        } else {
            format = BluetoothGattCharacteristic.FORMAT_UINT8;
            Log.d(TAG, "Heart rate format UINT8.");
        }
        final int heartRate = characteristic.getIntValue(format, 1);
        Log.d(TAG, String.format("Received heart rate: %d", heartRate));
        intent.putExtra(EXTRA_DATA, String.valueOf(heartRate));
    } else {
        // For all other profiles, writes the data formatted in HEX.
        final byte[] data = characteristic.getValue();
        if (data != null && data.length > 0) {
            final StringBuilder stringBuilder = new StringBuilder(data.length);
            for(byte byteChar : data)
                stringBuilder.append(String.format("%02X ", byteChar));
            intent.putExtra(EXTRA_DATA, new String(data) + "n" +
                    stringBuilder.toString());
        }
    }
    sendBroadcast(intent);
}

Back in DeviceControlActivity, these events are handled by a BroadcastReceiver:
回到DeviceControlActivity,那些事件都被一个布罗兹castReceiver接收管理:

// Handles various events fired by the Service.
// ACTION_GATT_CONNECTED: connected to a GATT server.
// ACTION_GATT_DISCONNECTED: disconnected from a GATT server.
// ACTION_GATT_SERVICES_DISCOVERED: discovered GATT services.
// ACTION_DATA_AVAILABLE: received data from the device. This can be a
// result of read or notification operations.
private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action)) {
            mConnected = true;
            updateConnectionState(R.string.connected);
            invalidateOptionsMenu();
        } else if (BluetoothLeService.ACTION_GATT_DISCONNECTED.equals(action)) {
            mConnected = false;
            updateConnectionState(R.string.disconnected);
            invalidateOptionsMenu();
            clearUI();
        } else if (BluetoothLeService.
                ACTION_GATT_SERVICES_DISCOVERED.equals(action)) {
            // Show all the supported services and characteristics on the
            // user interface.
            displayGattServices(mBluetoothLeService.getSupportedGattServices());
        } else if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)) {
            displayData(intent.getStringExtra(BluetoothLeService.EXTRA_DATA));
        }
    }
};

1、前言

上一篇讲了何等编写翻译安装XlueZ-5,本篇重要在于玩BlueZ,用命令行去操作BLE设备:

  • [BlueZ] 1、Download install and use the BlueZ and hcitool on PI 3B+

澳门博发娱乐官网 14

Conversion Quaternion to Euler

Receiving GATT Notifications

Virtual Reality High Performance

Bluetooth APIs 能够使得应用具备下边功效:

关门顾客端app

Once your app has finished using a BLE device, it should call close() so the system can release resources appropriately:
若果你的应用程序实现使用BLE设备,它应当调用close(),以便系统能够准确释放能源:

public void close() {
    if (mBluetoothGatt == null) {
        return;
    }
    mBluetoothGatt.close();
    mBluetoothGatt = null;
}

后记:本文翻译自google开垦者网址。链接如下:
https://developer.android.google.cn/guide/topics/connectivity/bluetooth-le.html
迎接转发,但请珍视小编职业,留下本文后记
作者:Jaesoon
邮箱:jayyuz@163.com
日期:2017-09-17

四元数(Quaternion)和旋转

6.与BLE设备调换。比方类似传感器,心率监视器,健美设备,等等

接收GATT通知

It's common for BLE apps to ask to be notified when a particular characteristic changes on the device. This snippet shows how to set a notification for a characteristic, using the setCharacteristicNotification() method:
当设备上三个特定的特征发生转移时,BLE应用去供给被文告很普遍。这段代码呈现了怎么通过行使setCharacteristicNotification()方法,去为壹脾性格设置一个通报:

private BluetoothGatt mBluetoothGatt;
BluetoothGattCharacteristic characteristic;
boolean enabled;
...
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
...
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
        UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descriptor);

Once notifications are enabled for a characteristic, an onCharacteristicChanged() callback is triggered if the characteristic changes on the remote device:
假诺三个特征被使能通告,假如远程设备上的那本性情发生了退换,多个onCharacteristicChanged()回调被触发。

@Override
// Characteristic notification
public void onCharacteristicChanged(BluetoothGatt gatt,
        BluetoothGattCharacteristic characteristic) {
    broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
}

 

提供管理蓝牙( Bluetooth® )功效的类,比如对设备的围观,连接装置,和管理设施之间的传输数据。蓝牙5.0API协助杰出Bluetooth和低功耗蓝牙( Bluetooth® )。

Setting Up BLE

设置BLE
Before your application can communicate over BLE, you need to verify that BLE is supported on the device, and if so, ensure that it is enabled. Note that this check is only necessary if <uses-feature.../> is set to false.
在您利用能够由此BLE通讯之前,你要求申明这些设备是不是协助BLE,即便得以,确认BLE是使能的。供给留神的是独有当<uses-feature.../>设置为false这一个是反省须求的

If BLE is not supported, then you should gracefully disable any BLE features. If BLE is supported, but disabled, then you can request that the user enable Bluetooth without leaving your application. This setup is accomplished in two steps, using the BluetoothAdapter.
假设BLE不被协助,则你须要优雅的除能全体的BLE性情。假设BLE被支持,可是被除能了,则你须求乞求客户使能蓝牙( Bluetooth® )而不偏离的接纳。该装置使用BluetoothAdapter在五个步骤中成功。

  1. Get the BluetoothAdapter
    获取BluetoothAdapter
    The BluetoothAdapter is required for any and all Bluetooth activity. The BluetoothAdapter represents the device's own Bluetooth adapter (the Bluetooth radio). There's one Bluetooth adapter for the entire system, and your application can interact with it using this object. The snippet below shows how to get the adapter. Note that this approach uses getSystemService() to return an instance of BluetoothManager, which is then used to get the adapter. Android 4.3 (API Level 18) introduces BluetoothManager:
    有着的蓝牙5.0Activity中都急需蓝牙5.0适配器。Bluetooth适配器表示了那些装置自带的蓝牙( Bluetooth® )适配器(蓝牙5.0有线电)。整个系统有一个Bluetooth适配器,你的运用可以经过那些指标和它交互。上边包车型地铁代码片段显示了怎么获得那么些适配器。必要静心的是其一格局运用getSystemService()去取得BluetoothManager的三个实例,然后用于获取适配器。Android 4.3(API Level 18)介绍了蓝牙( Bluetooth® )Manager。

    private BluetoothAdapter mBluetoothAdapter;
    ...
    // Initializes Bluetooth adapter.
    final BluetoothManager bluetoothManager =
            (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
    mBluetoothAdapter = bluetoothManager.getAdapter();
    
  2. Enable Bluetooth
    使能蓝牙5.0
    Next, you need to ensure that Bluetooth is enabled. Call isEnabled() to check whether Bluetooth is currently enabled. If this method returns false, then Bluetooth is disabled. The following snippet checks whether Bluetooth is enabled. If it isn't, the snippet displays an error prompting the user to go to Settings to enable Bluetooth:
    接下去,你需求认可Bluetooth是使能的。调用isEnable()去反省是否蓝牙( Bluetooth® )脚下是或不是使能。就算这些主意重回false,则蓝牙5.0是除能的。接下来的代码片段检查是不是蓝牙5.0是是能的。若无使能,代码片段会来得三个客户去设置开启蓝牙5.0的谬误提示。

    // Ensures Bluetooth is available on the device and it is enabled. If not,
    // displays a dialog requesting user permission to enable Bluetooth.
    if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    }
    

Note: The REQUEST_ENABLE_BT constant passed to startActivityForResult(android.content.Intent, int) is a locally-defined integer (which must be greater than 0) that the system passes back to you in your onActivityResult(int, int, android.content.Intent) implementation as the requestCode parameter.

注意:传送给startActivityForResult()的常量REQUEST_ENABLE_BT是贰个地点定义的平头(必得大于0),那几个平头系统会完毕为requestCode参数,在您的onActivityResult()方法中,回传给你。

Daydream

  • Scan for other Bluetooth devices (including BLE devices).
  • Query the local Bluetooth adapter for paired Bluetooth devices.
  • Establish RFCOMM channels/sockets.
  • Connect to specified sockets on other devices.
  • Transfer data to and from other devices.
  • Communicate with BLE devices, such as proximity sensors, heart rate monitors, fitness devices, and so on.
  • Act as a GATT client or a GATT server (BLE).

Key Terms And Concepts

Dialog-semiconductor

The Bluetooth APIs let applications:

器重术语和定义

Here is a summary of key BLE terms and concepts:
以下是有关BLE的重要术语和概念的摘要

  • Generic Attribute Profile (GATT)—The GATT profile is a general specification for sending and receiving short pieces of data known as "attributes" over a BLE link. All current Low Energy application profiles are based on GATT.
    通用属性配置文件(GATT)--通用属性配置文件是四个通过BLE链接发送或收受短小一些数据或被喻为“属性”的通用标准。当前全数的低耗电应用配置文件都基于GATT。

    • The Bluetooth SIG defines many profiles for Low Energy devices. A profile is a specification for how a device works in a particular application. Note that a device can implement more than one profile. For example, a device could contain a heart rate monitor and a battery level detector.
    • 蓝牙5.0技术缔盟为低功耗设备定义了无数隶属文件。配置文件是多少个在一定应用中配备如何行事的正规化。请细心,多个配备得以兑现八个布局文件。譬喻:二个道具能够分包多个心跳检查评定器和多个电量质量评定器
  • Attribute Protocol (ATT)—GATT is built on top of the Attribute Protocol (ATT). This is also referred to as GATT/ATT. ATT is optimized to run on BLE devices. To this end, it uses as few bytes as possible. Each attribute is uniquely identified by a Universally Unique Identifier (UUID), which is a standardized 128-bit format for a string ID used to uniquely identify information. The attributes transported by ATT are formatted as characteristics and services.
    质量左券(ATT)——GATT构造建设在性质左券(ATT)之上。那也被叫做GATT/ATT。ATT经过优化,可在BLE设备上运营。为此,它采纳尽或许少的字节。每种属性由通用独一标志符(UUID)独一标记,该标记符是用于独一标志消息的原则128-bit格式的字符串ID。由ATT传输的习性被格式化为特征和劳务

  • Characteristic—A characteristic contains a single value and 0-n descriptors that describe the characteristic's value. A characteristic can be thought of as a type, analogous to a class.
    特性——贰个风味包罗三个值和0至四个描述特征的描述符。贰个表征能够被以为是一体系型,类似于一个类。

  • Descriptor—Descriptors are defined attributes that describe a characteristic value. For example, a descriptor might specify a human-readable description, an acceptable range for a characteristic's value, or a unit of measure that is specific to a characteristic's value.
    陈诉符——描述符是描述特征值的概念属性。举个例子:描述符或然能够钦赐一个生人可读的汇报,特征值的可接受范围,或特征值特有的单位

  • Service—A service is a collection of characteristics. For example, you could have a service called "Heart Rate Monitor" that includes characteristics such as "heart rate measurement." You can find a list of existing GATT-based profiles and services on bluetooth.org.
    劳务——服务是一个表征的集纳。比方:你能够运用一个名字为“心跳检查评定器”的服务,个中囊括“心跳度量”等特性。你可以在bluetooth.org上找到三个早就存在的依照GATT的配置文件和服务的列表

What is Google Daydream

7.作为GATTclient或GATT服务端

Roles and Responsibilities

Daydream Performance HUD

5.与其余设施之间数据传输

剧中人物和职分

Here are the roles and responsibilities that apply when an Android device interacts with a BLE device:
这边是Android设备与BLE设备交互时适用的剧中人物和职分:

  • Central vs. peripheral. This applies to the BLE connection itself. The device in the central role scans, looking for advertisement, and the device in the peripheral role makes the advertisement.
    宗旨和外设。那适用于BLE连接本人。中央设备角色扫描,找寻广告,同期外剧中人物设备创造广告。

  • GATT server vs. GATT client. This determines how two devices talk to each other once they've established the connection.
    GATT服务器和GATT顾客端。那决定了七个设施构造建设连接之后怎么通讯。

To understand the distinction, imagine that you have an Android phone and an activity tracker that is a BLE device. The phone supports the central role; the activity tracker supports the peripheral role (to establish a BLE connection you need one of each—two things that only support peripheral couldn't talk to each other, nor could two things that only support central).
为了驾驭那么些特点,假诺你抱有二个Android手机和多少个BLE活动追踪器设备。手提式有线电话机担负宗旨剧中人物;活动追踪器负责外设剧中人物(为了创制BLE连接,你必要有个别的如此的设备。只帮衬外设剧中人物的五个设备不可能相互通讯,同样,仅支持大旨剧中人物的八个设施也不能够互相通讯)

Once the phone and the activity tracker have established a connection, they start transferring GATT metadata to one another. Depending on the kind of data they transfer, one or the other might act as the server. For example, if the activity tracker wants to report sensor data to the phone, it might make sense for the activity tracker to act as the server. If the activity tracker wants to receive updates from the phone, then it might make sense for the phone to act as the server.
手提式有线电话机和移动追踪器一旦确立了连接,他们就起来相互传输GATT元数据。依赖于他们传输的数目,在那之中的三个从头充当服务器。例如:借使移动追踪器希望将传感器数据报告给手提式有线电话机,那么活动追踪器可能会担负服务器。如何运动追踪器想要从手提式有线电话机接到更新,那么手机大概会担当服务器。

In the example used in this document, the Android app (running on an Android device) is the GATT client. The app gets data from the GATT server, which is a BLE heart rate monitor that supports the Heart Rate Profile. But you could alternatively design your Android app to play the GATT server role. See BluetoothGattServer for more information.
本条文书档案中采用的事例中,Android APP(运行在Android设备上)是GATT顾客端。App从二个GATT服务器中获取数据,GATT服务器是贰个提供心跳配置文件的BLE心跳检查实验器。不过你也能够设计你的安卓App充当GATT服务器的角色。有关详细音讯,请查看Bluetooth( Bluetooth® )GattServer。

IQS525-B000

3.建立RFCOMM channels/sockets.

SmartBond™ DA14681

类:

BluetoothA2dp:这几个类提供调节Bluetooth( Bluetooth® )A2DP profile的公共APIs

BluetoothAdapter:代表本地设备的蓝牙( Bluetooth® )adapter.
BluetoothAssignedNumbers:Bluetooth分配号码

BluetoothClass:代表一个蓝牙( Bluetooth® )类。它形容陈述了设施的一般特征(characteristics)和力量(capabilities)

BluetoothClass.Device:定义全部设备类的常量

BluetoothClass.Device.Major:定义全部要害设备类的常量

BluetoothClass.Service:定义全部服务类的常量

BluetoothDevice:代表叁个远道蓝牙( Bluetooth® )设备

=============================================================================================

BluetoothGatt:蓝牙GATT Profile的公共APIs

BluetoothGattCallback:这些抽象类用于落实BluetoothGatt回调

BluetoothGattCharacteristic:代表一个BluetoothGATT Characteristic.

                                              多少个GATT Characteristic是用来布局叁个GATT service,BluetoothGattService的宗旨数据成分

BluetoothGattDescriptor:代表三个蓝牙( Bluetooth® )( Bluetooth® )GATT Descriptor.

                                           GATT Descriptor包罗一个GATT characteristic,BluetoothGattCharacteristic的额外新闻和属性.

Classes


BluetoothA2dp This class provides the public APIs to control the Bluetooth A2DP profile. 
BluetoothAdapter Represents the local device Bluetooth adapter. 
BluetoothAssignedNumbers Bluetooth Assigned Numbers. 
BluetoothClass Represents a Bluetooth class, which describes general characteristics and capabilities of a device. 
BluetoothClass.Device Defines all device class constants. 
BluetoothClass.Device.Major Defines all major device class constants. 
BluetoothClass.Service Defines all service class constants. 
BluetoothDevice Represents a remote Bluetooth device. 
BluetoothGatt Public API for the Bluetooth GATT Profile. 
BluetoothGattCallback This abstract class is used to implement BluetoothGatt callbacks. 
BluetoothGattCharacteristic Represents a Bluetooth GATT Characteristic

A GATT characteristic is a basic data element used to construct a GATT service,BluetoothGattService

BluetoothGattDescriptor Represents a Bluetooth GATT Descriptor

GATT Descriptors contain additional information and attributes of a GATT characteristic,BluetoothGattCharacteristic

BluetoothGattServer Public API for the Bluetooth GATT Profile server role. 
BluetoothGattServerCallback This abstract class is used to implement BluetoothGattServer callbacks. 
BluetoothGattService Represents a Bluetooth GATT Service

Gatt Service contains a collection of BluetoothGattCharacteristic, as well as referenced services. 

BluetoothHeadset Public API for controlling the Bluetooth Headset Service. 
BluetoothHealth Public API for Bluetooth Health Profile. 
BluetoothHealthAppConfiguration The Bluetooth Health Application Configuration that is used in conjunction with the BluetoothHealthclass. 
BluetoothHealthCallback This abstract class is used to implement BluetoothHealth callbacks. 
BluetoothManager High level manager used to obtain an instance of an BluetoothAdapter and to conduct overall Bluetooth Management. 
BluetoothServerSocket A listening Bluetooth socket. 
BluetoothSocket A connected or connecting Bluetooth socket. 

BluetoothGattServer:蓝牙GATT Profileserver角色的公共APIs.

BluetoothGattServerCallback:那么些抽象类用于落到实处BluetoothGattServer回调.

BluetoothGattService:代表四个蓝牙( Bluetooth® )( Bluetooth® )GATT Service.

================================================================================

BluetoothHeadset:调节蓝牙( Bluetooth® )动圈耳机(Headset)服务的公共API.

BluetoothHealth:蓝牙Health Profile的公共API.

BluetoothHealthAppConfiguration:The Bluetooth Health Application Configuration(配置)用来与BluetoothHealth类结合.

BluetoothHealthCallback:用于落到实处BluetoothHealth回调的抽象类

BluetoothManager:用来博取BluetoothAdapter的实例的领导,实行完美的蓝牙5.0管理

BluetoothServerSocket:四个监听Bluetooth的socket

BluetoothSocket:一个已连接或正在连接的蓝牙5.0socket.

本文由胜博发-操作发布,转载请注明来源:PI定制版本)版本Linux系统,1澳门博发娱乐官网