您的位置:新葡亰496net > 电脑系统 > 新葡亰496net:开发资源汇总,初步了解Android

新葡亰496net:开发资源汇总,初步了解Android

发布时间:2019-06-16 03:25编辑:电脑系统浏览(161)

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

    Daydream

    Key Terms And Concepts

    前言

    新近攻读Linux相关的东西,当中三个思路是看书时用华为平板上的SSH连接Linux主机实验。先是感到台式机功耗大、噪音大,后来台式机计算机也认为耗电大、噪音大。于是就悟出了龙船泡派,谷歌(谷歌)查了瞬间后知道未来早正是2015年5月生产的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

    新葡亰496net 1

    Raspberry Pi 3 Model B 布局图

    新葡亰496net 2

    Raspberry Pi 3 Model B 实物图

    新葡亰496net 3

    Tmall购物到货图

    新葡亰496net 4

    设置好外壳图

    从最近的技巧参数知道木莓派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

    迷你bian官网(Raspbian Jessie二零一五年十二月13日版本):https://minibianpi.wordpress.com/

    新葡亰496net 5

    Minibian系统运营截图

    新葡亰496net 6

    android.bluttooth

    首要术语和定义

    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.
      • 蓝牙( Bluetooth® )工夫联盟为低功耗设备定义了广大专项文件。配置文件是多个在特定应用中装置怎么着行事的正规化。请留心,三个设备能够完结四个布局文件。譬如:多个装置得以分包一个心跳检查评定器和四个电量检查测试器
    • 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的布署文件和服务的列表

    设置操作系统

    设置Minibian的手续(以安装了Microsoft Windows 10 X64的微型Computer作为帮衬平台):
    1、策画叁个Micro SDXC存款和储蓄卡,体量在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 SD读取卡;
    5、将写有Minibian系统的Micro TF内部存款和储蓄器卡放入木莓派的Micro TF存款和储蓄卡槽(Micro SD Card Slot);
    6、三月泡派加电开机,Minibian的用户名称叫“root”,早先密码为“raspberry”(记得登陆后首先件事正是使用“passwd root”命令修改root用户的密码)。

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

    1、前言

    上一篇讲了怎么编写翻译安说大话lueZ-5,本篇重要在于玩BlueZ,用命令行去操作BLE设备:

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

    新葡亰496net 7

    Virtual Reality High Performance

    提供管理Bluetooth效用的类,比方对配备的围观,连接装置,和管制设施之间的传输数据。蓝牙( Bluetooth® )API支持美貌蓝牙( Bluetooth® )和低功耗Bluetooth。

    Roles and Responsibilities

    安装Wordpress

    1、 安装Wordpress此前的操作:改造Micro TF卡的Linux数据分区的半空中

    fdisk /dev/mmcblk0

    键入“p”查看当前的分区情形;
    先键入“d”再键入“2”删除当前的数额分区;
    种种键入“n”“p”“2”创制新的数量分区,笔者动用的2014-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!” 。

    新葡亰496net 8

    Wordpress初步化分界面(依版本和语种分裂可能分裂)

    新葡亰496net 9

    填入相应的从头到尾的经过后,点击“提交”,在随之的页面中式点心击“安装”

    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

    新葡亰496net 10

    桑土准备参照他事他说加以侦查的图书,八面驶风,样样稀松,只援引小白购买

    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.
    

    新葡亰496net 11

    googlevr

    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.

    剧中人物和职分

    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 应用软件(运转在Android设备上)是GATT客户端。App从叁个GATT服务器中获取数据,GATT服务器是多少个提供心跳配置文件的BLE心跳检查测试器。然则你也得以安排你的安卓App充当GATT服务器的角色。有关详细音讯,请查看蓝牙( Bluetooth® )GattServer。

    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对应的劳动如下图:

    新葡亰496net 12

    我们选择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
    

    新葡亰496net 13

    Google VR for Android

    至于好些个其它的优良蓝牙5.0音讯。能够看蓝牙指南。有关好些个别样的低耗能Bluetooth的音讯,能够看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.
    为了在您的选择中选用Bluetooth特点,你必供给注解蓝牙5.0权限 BLUETOOTH 。你要此权限工夫实践别的蓝牙5.0通讯,如:请求多个接连,接收二个接连,和传输数据。

    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信标平常与岗位相关联。
    为了在平素可是滤器的情状下利用蓝牙5.0( Bluetooth® )LeScanner,您必须透过注解应用程序的清单文件中的ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限来呼吁用户的权杖。

    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

    新葡亰496net 14

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

    GVR SDK and NDK Release Notes

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

    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® )而不离开的施用。该装置使用蓝牙( Bluetooth® )Adapter在七个步骤中成就。

    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中都亟待蓝牙( Bluetooth® )适配器。Bluetooth适配器表示了那个设备自带的蓝牙( Bluetooth® )适配器(Bluetooth有线电)。整个种类有四个蓝牙( Bluetooth® )适配器,你的运用能够透过这几个目的和它交互。上面包车型大巴代码片段展示了什么获得那个适配器。必要注意的是以此方法应用getSystemService()去获得BluetoothManager的二个实例,然后用于获取适配器。Android 4.3(API Level 18)介绍了BluetoothManager。

      private BluetoothAdapter mBluetoothAdapter;
      ...
      // Initializes Bluetooth adapter.
      final BluetoothManager bluetoothManager =
              (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
      mBluetoothAdapter = bluetoothManager.getAdapter();
      
    2. Enable Bluetooth
      使能蓝牙( Bluetooth® )
      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,则蓝牙( Bluetooth® )是除能的。接下来的代码片段检查是或不是Bluetooth是是能的。假诺未有使能,代码片段会来得贰个用户去设置开启Bluetooth的荒谬提醒。

      // 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()方法中,回传给你。

    http://www.apkmirror.com/apk/google-inc

    Bluetooth( Bluetooth® ) APIs 能够使得应用具备上面功用:

    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()方法。这么些艺术包罗三个蓝牙5.0( 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[], 蓝牙( Bluetooth® )( Bluetooth® )Adapter.LeScanCallback),提供三个特定的您的app补助的GATT服务UUID设备数组。

    Here is an implementation of the BluetoothAdapter.LeScanCallback, which is the interface used to deliver BLE scan results:
    此间有多少个蓝牙5.0( Bluetooth® )艾达pter.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.

    只顾:你能够扫描低耗能蓝牙5.0设备或特出Bluetooth设备,如蓝牙5.0所述。你不能够而且扫视低功耗蓝牙5.0设备和杰出蓝牙( Bluetooth® )设备。

    com.google.vr.vrcore

    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设备是能够获得的,是或不是自动的连接上它),二个指向蓝牙( Bluetooth® )( Bluetooth® )GattCallback的引用。

    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服务器,并再次来到三个蓝牙( Bluetooth® )Gatt实例,然后你能够应用它来拓展GATT客户端操作。调用者(Android app)是GATT客户端。蓝牙GattCallback用来传送结果给客户端,比方连接情形,以及任何更进一步的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("X ", 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));
            }
        }
    };
    

    com.google.android.vr.home

    2.为配对的蓝牙( Bluetooth® )设备查询本地Bluetooth适配器

    Reading BLE Attributes

    读取BLE属性

    新葡亰496net,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);
             }
        ...
        }
    ...
    }
    

    Google Inc. Daydream (Daydream)

    3.建立RFCOMM channels/sockets.

    Receiving GATT Notifications

    Google Inc. Google VR Services (Daydream)

    4.连连在别的器材上点名的sockets

    接收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);
    }
    

    What is Google Daydream

    5.与其他器材之间数据传输

    Closing the Client App

    Daydream Performance HUD

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

    关闭客户端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

    新葡亰496net:开发资源汇总,初步了解Android。Daydream Controller手柄数据的剖析

    7.作为GATTclient或GATT服务端

    How do I fix my Daydream controller

    利用那些APIs来了却Bluetooth之间的调换,一个应用程序必须注解BLUETOOTH权力。对于部分非常的功能。如请求设备开掘,也非得BLUETOOTH_ADMIN权限。

    Google Daydream Controller Teardown

    提示:不是成套的Android设备都提供了蓝牙作用。

    Daydream controller : Comprehensive guide

    The Bluetooth APIs let applications:

    Use the Daydream View controller and headset

    • 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).

    谷歌(Google)Daydream V帕杰罗平台应用供给:怎么样统一准备V兰德Tiguan应用

    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.

     

    Note: Not all Android-powered devices provide Bluetooth functionality.

    Algorithm

    接口:

    BluetoothAdapter.LeScanCallback :用来提供LE扫描结果的回调接口

    BluetoothProfile新葡亰496net:开发资源汇总,初步了解Android。:Bluetooth Profiles的公共APIs

    BluetoothProfile.ServiceListener:蓝牙5.0Profile IPC client与service的接连和断开时的一个文告接口

    -

    Conversion Quaternion to Euler

    Interfaces


    BluetoothAdapter.LeScanCallback Callback interface used to deliver LE scan results. 
    BluetoothProfile Public APIs for the Bluetooth Profiles. 
    BluetoothProfile.ServiceListener An interface for notifying BluetoothProfile IPC clients when they have been connected or disconnected to the service. 

    Conversion Euler to Quaternion

    类:

    BluetoothA2dp:这一个类提供调节BluetoothA2DP profile的公共APIs

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

    BluetoothClass:代表三个蓝牙5.0类。它形容叙述了设备的相似特征(characteristics)和技巧(capabilities)

    BluetoothClass.Device:定义全部装置类的常量

    BluetoothClass.Device.Major:定义全体首要配备类的常量

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

    BluetoothDevice:代表二个长途Bluetooth设备

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

    BluetoothGatt:蓝牙GATT Profile的公共APIs

    BluetoothGattCallback:那些抽象类用于落到实处蓝牙( Bluetooth® )Gatt回调

    BluetoothGattCharacteristic:代表一个BluetoothGATT Characteristic.

                                                  三个GATT Characteristic是用来布局一个GATT service,BluetoothGattService的骨干数据成分

    BluetoothGattDescriptor:代表一个BluetoothGATT 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:蓝牙5.0( Bluetooth® )GATT Profileserver剧中人物的公共APIs.

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

    BluetoothGattService:代表八个BluetoothGATT Service.

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

    BluetoothHeadset:控制Bluetooth耳麦(Headset)服务的公共API.

    BluetoothHealth:蓝牙Health Profile的公共API.

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

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

    BluetoothManager:用来获得BluetoothAdapter的实例的集团主,进行完善的蓝牙( Bluetooth® )管理

    BluetoothServerSocket:二个监听蓝牙5.0的socket

    BluetoothSocket:三个已接连或正在连接的蓝牙( Bluetooth® )socket.

     

    ATW

    Timewarp

    Asynchronous timewarp

    How Does Time Warping Work

    Difference_between_ATW_ASW_and_Reprojection 

     

    Bluetooth

    Bluetooth Core Specification

    HID-over-GATT

    NordicSemiconductor

    Dialog-semiconductor

    SmartBond™ DA14681

    Android Bluetooth Low Energy

    Nordic SDK and Documentation

    Calculate throughput for a BLE link

    Introduction to Bluetooth Low Energy

    Android Lollipop: Bluetooth LE Matures

    Bluetooth Low Energy vs. Classic Bluetooth

    Getting Started with Bluetooth Low Energy

    Maximizing BLE Throughput on iOS and Android

    How different BLE packet types influence throughput

    Analysis of Latency Performance of Bluetooth Low Energy (BLE) Networks

    FTS4BT™ Bluetooth® Protocol Analyzer and Packet Sniffer

    CPAS-11(Frontline_16.10.12321.12610)

     

    Latency

    Front Buffer Rendering

    Reducing latency in mobile VR by using single buffered strip rendering

    The importance of fine-grained GPU preemption support for VR

     

    Tools

    dotPeek

     

    Touch

    IQS525-B000

     

    Unity

    Unity Editor and Android Runtime for Daydream

    Unity Download

    GVR-Unity-SDK

    Unity3d Quaternion

    Unity优化技艺

    四元数(Quaternion)和旋转

     

    Qualcomm

    依据骁龙 V奔驰M级 SDK的VLX570图形优化

     

    EGL

    EGL10

    Tracer for OpenGL ES

    本文由新葡亰496net发布于电脑系统,转载请注明出处:新葡亰496net:开发资源汇总,初步了解Android

    关键词: