国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

使用Java藍(lán)牙無(wú)線通訊技術(shù)API(第一部分 -API概覽)(2)

2019-11-18 10:59:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
數(shù)據(jù)元素類
    一個(gè)服務(wù)可以有許多的屬性,一些是強(qiáng)制性的,其他的是可選的。一個(gè)服務(wù)屬性由一個(gè)數(shù)據(jù)元素對(duì)象來(lái)表現(xiàn),這個(gè)數(shù)據(jù)元素對(duì)象提供了設(shè)置并取得屬性值的方法。
    強(qiáng)制性屬性是在注冊(cè)一個(gè)服務(wù)之后被自動(dòng)設(shè)定的。這些屬性包括:ServiceRecordHandle,ServiceClassIDList, ServiceRecordState, ServiceID, 還有 PRotocolDescriptorList。
    假如你想要的話,還可以設(shè)置可選屬性。可選屬性有很多,但是有三個(gè)值得關(guān)注:ServiceName,ServiceDescription, 和 ProviderName。
    想得到更多的關(guān)于這些屬性的信息,請(qǐng)參看JABWT的文檔或藍(lán)牙規(guī)范。
設(shè)備治理API
    有3個(gè)主要的類來(lái)支持設(shè)備治理:
    .LocalDevice
    .RemoteDevice
    .DeviceClass
本地設(shè)備類
LocalDevice類標(biāo)識(shí)了本地藍(lán)牙設(shè)備。藍(lán)牙應(yīng)用程序和LocalDevice之間的關(guān)系是典型的一對(duì)一關(guān)系:

使用Java藍(lán)牙無(wú)線通訊技術(shù)API(第一部分 -API概覽)(2)(圖一)
圖 10:本地設(shè)備類
本地設(shè)備提供了方法來(lái)返回關(guān)于本地設(shè)備的信息,并且能夠進(jìn)入Bluetooth manager:
    .getBluetoothAddress()返回藍(lán)牙設(shè)備地址。
    .getDeviceClass()返回設(shè)備類。
    .getFriendlyName()返回設(shè)備友好名稱,藍(lán)牙設(shè)備名通常是用戶在藍(lán)牙控制中心為其設(shè)置的我們將會(huì)在后面看到。
    .getRecord()返回一個(gè)指定藍(lán)牙連接的服務(wù)記錄。
    .updateRecord()方法用來(lái)為指定的ServiceRecord更新SDDB服務(wù)記錄。
    .getDiscoverable()返回設(shè)備的可發(fā)現(xiàn)狀態(tài)。
    .setDiscoverable()設(shè)置設(shè)備的可發(fā)現(xiàn)狀態(tài)。
    .getDiscoveryAgent()返回一個(gè)參考給發(fā)現(xiàn)代理。
    .getProperty()返回一個(gè)設(shè)備的藍(lán)牙屬性
通過(guò)調(diào)用getProperty()方法你可以得到的屬性包括:
    .bluetooth.api.version,藍(lán)牙API版本
    .bluetooth.sd.attr.retrievable.max,一次性能夠被獲得的服務(wù)記錄屬性的最大值
    .bluetooth.connected.devices.max,支持的連接設(shè)備的最大值
    .bluetooth.sd.trans.max,同時(shí)發(fā)生的服務(wù)發(fā)現(xiàn)處理的最大值
    .bluetooth.l2cap.receiveMTU.max,L2CAP最大發(fā)射單元
你可以在javadoc文檔中或是規(guī)范中學(xué)習(xí)更多的有關(guān)藍(lán)牙屬性的內(nèi)容。
遠(yuǎn)端設(shè)備類
    一個(gè)RemoteDevice的實(shí)例代表了一個(gè)遠(yuǎn)端藍(lán)牙設(shè)備。在一個(gè)藍(lán)牙客戶端應(yīng)用程序可以進(jìn)行服務(wù),消費(fèi)之前,它必須發(fā)送一個(gè)設(shè)備請(qǐng)求來(lái)發(fā)現(xiàn)遠(yuǎn)端設(shè)備。典型的藍(lán)牙應(yīng)用程序和遠(yuǎn)端設(shè)備之間的關(guān)系是一對(duì)多:
使用Java藍(lán)牙無(wú)線通訊技術(shù)API(第一部分 -API概覽)(2)(圖二)
圖 11: 遠(yuǎn)端設(shè)備類
遠(yuǎn)端設(shè)備(RemoteDevice)提供的方法中,有些很類似于本地設(shè)備(LocalDevice)里提供的方法:
    .getBluetoothAddress()返回藍(lán)牙地址。
    .getFriendlyName()返回藍(lán)牙設(shè)備名。
    .getRemoteDevice()返回相應(yīng)的被指定藍(lán)牙連接的遠(yuǎn)端設(shè)備。
    .authenticate()嘗試識(shí)別驗(yàn)證遠(yuǎn)端設(shè)備。
    .authorize()為指定的藍(lán)牙連接去嘗試批準(zhǔn)遠(yuǎn)端設(shè)備訪問(wèn)本地設(shè)備。
    .encrypt()嘗試為指定的藍(lán)牙連接開啟或關(guān)閉加密。
    .isAuthenticated()測(cè)試是否遠(yuǎn)端設(shè)備可以被驗(yàn)證。
    .isAuthorized()測(cè)試是否遠(yuǎn)端設(shè)備已經(jīng)被藍(lán)牙控制中心授權(quán)訪問(wèn)本地設(shè)備以進(jìn)行藍(lán)牙連接。
    .isEncrypted()測(cè)試是否本地設(shè)備和遠(yuǎn)端設(shè)備之間的通信被加密。
    .isTrustedDevice()測(cè)試是否遠(yuǎn)端設(shè)備被藍(lán)牙控制中心指定為可信任的。
DeviceClass類
    一個(gè)DeviceClass對(duì)象代表一個(gè)設(shè)備的設(shè)備類(CoD),例如一個(gè)打印機(jī)或者一部電話。CoD包括一個(gè)主類,一個(gè)輔的類,和服務(wù)類型或服務(wù)類。DeviceClass提供了如下方法:
    .getMajorDeviceClass()方法獲取設(shè)備的主類。
    .getMinorDeviceClass()方法獲取設(shè)備的輔類。
    .getServiceClasses()獲取設(shè)備的服務(wù)類。
當(dāng)一個(gè)設(shè)備被發(fā)現(xiàn),同時(shí)他的類也會(huì)被發(fā)現(xiàn);當(dāng)發(fā)現(xiàn)代理調(diào)用deviceDiscovered()時(shí),其中一個(gè)參數(shù)就是DeviceClass。你可以通過(guò)它的getDeviceClass()方法找到本地設(shè)備的CoD。
藍(lán)牙通信
    JABWT連接是基于邏輯鏈路及適配層協(xié)議的。L2CAP是一個(gè)低級(jí)協(xié)議用來(lái)治理數(shù)據(jù)包,直到達(dá)到64k。L2CAP中的處理細(xì)節(jié)像消息分割和重組(SAR),多路連接。另外,串口Profile(SPP)提供RFCOMM,一個(gè)通過(guò)L2CAP層的串行模擬協(xié)議。
    L2CAP和RFCOMM連接都是基于通用連接框架(GCF)的,直接通向接口和類的層次去創(chuàng)建連接和執(zhí)行IO命令。JABWT依靠L2CAP和RFCOMM協(xié)議擴(kuò)展了通用連接框架(GCF)以分別支持通過(guò)L2CAPConnection 和StreamConnection類型連接。就在L2CAPConnection被JSR 82介紹的同時(shí),StreamConnection在原始的javax.microedition.io的GCF中被定義了,它是依靠CLDC發(fā)展來(lái)的。注重,JABWT中L2CAPConnection僅支持面向連接的L2CAP連接。圖12顯示了以基于GCF形式的各接口通過(guò)藍(lán)牙網(wǎng)絡(luò)進(jìn)行通信的過(guò)程:
使用Java藍(lán)牙無(wú)線通訊技術(shù)API(第一部分 -API概覽)(2)(圖三)
圖 12: 通用連接框架和藍(lán)牙連接類型
    層次定義了L2CAP和Stream的連接和連接通知器。一個(gè)連接定義了一個(gè)連接終端,當(dāng)一個(gè)連接通知器執(zhí)行了服務(wù)行為時(shí),它會(huì)等待并接受L2CAP連接處理。
    處理L2CAP連接比處理流連接更復(fù)雜。使用L2CAP時(shí),開發(fā)者們必須處理好最大消息的大小(即最大傳輸單位,或叫做MTU)、打斷和重組等。這些復(fù)雜的事項(xiàng)在開發(fā)者使用流連接的時(shí)候被隱藏了,以使他們處理藍(lán)牙連通時(shí)獲得更好的效率。
    如同所有的GCF連接類型,你可以通過(guò)調(diào)用GCF連接工廠方法javax.microedition.io.Connector創(chuàng)建藍(lán)牙連接。傳遞給Connector()方法的連接URL決定了要?jiǎng)?chuàng)建的連接類型:
一個(gè)L2CAPConnection連接的URL格式:

BTspp://hostname:[CN UUID];parameters

一個(gè)RFCOMMStreamConnection連接的URL格式:

btspp://hostname:[CN UUID];parameters



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 长泰县| 和林格尔县| 甘肃省| 永清县| 建宁县| 隆德县| 巴彦县| 吴桥县| 石狮市| 新化县| 贵州省| 海安县| 大安市| 民和| 沿河| 疏勒县| 延安市| 梁山县| 柘城县| 永康市| 景宁| 台湾省| 九江市| 高台县| 闻喜县| 樟树市| 天峨县| 石嘴山市| 肥城市| 建平县| 宿州市| 锡林郭勒盟| 乌兰浩特市| 宁河县| 颍上县| 甘洛县| 玉屏| 五河县| 阿克陶县| 菏泽市| 富裕县|