Android 應(yīng)用開發(fā)】BluetoothDevice詳解

      網(wǎng)友投稿 1629 2022-05-30

      一. BluetoothDevice簡介

      1. 繼承關(guān)系

      public static Class BluetoothDevice extends Object implement Parcelable

      該類實(shí)現(xiàn)了Parcelable接口, 實(shí)現(xiàn)了Parcelable接口的類的對象可以封裝到Parcel對象中, 封裝后的數(shù)據(jù)可以通過Intent或者IPC傳遞;

      實(shí)現(xiàn)Parcelable接口要點(diǎn) :

      a. 實(shí)現(xiàn)writeTpParcl()方法 : 將數(shù)據(jù)寫入到Parcel對象中;

      public void writeToParcel(Parcel out, int arg1)

      {

      // TODO Auto-generated method stub

      out.writeBundle(this.mBundle);

      }

      b. 實(shí)現(xiàn)describeContents()方法 :

      public int describeContents()

      {

      // TODO Auto-generated method stub

      return 0;

      }

      c.實(shí)現(xiàn)Parcelable.Creator接口 :

      public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {

      public TrainInfo createFromParcel(Parcel in)

      {

      SampleBean ti=new SampleBean();

      ti.mBundle=in.readBundle();

      return ti;

      }

      public SampleBean[] newArray(int size)

      {

      return new SampleBean[size];

      }

      };

      2. 該類簡介

      BluetoothDevice對象代表了一個(gè)遠(yuǎn)程的藍(lán)牙設(shè)備, 通過這個(gè)類可以查詢遠(yuǎn)程設(shè)備的物理地址, 名稱, 連接狀態(tài)等信息;

      對這個(gè)類的操作, 會(huì)執(zhí)行在遠(yuǎn)程藍(lán)牙設(shè)備的硬件上.

      對象獲取途徑 :

      a. 調(diào)用BluetoothAdapter的getRemoteDevice(address)方法獲取物理地址對應(yīng)的該類對象;

      b. 調(diào)用BluetoothAdapter的getBoundedDevices()方法, 可以獲取已經(jīng)配對的藍(lán)牙設(shè)備集合;

      3. 需要權(quán)限

      android.permission.BLUETOOTH?: 允許程序連接到已配對的藍(lán)牙設(shè)備, 請求連接/接收連接/傳輸數(shù)據(jù)需要改權(quán)限, 主要用于對配對后進(jìn)行操作;

      android.permission.BLUETOOTH_ADMIN?:?允許程序發(fā)現(xiàn)和配對藍(lán)牙設(shè)備, 該權(quán)限用來管理藍(lán)牙設(shè)備, 有了這個(gè)權(quán)限, 應(yīng)用才能使用本機(jī)的藍(lán)牙設(shè)備, 主要用于對配對前的操作;

      優(yōu)先級 : BLUETOOTH權(quán)限是BLUETOOTH_ADMIN權(quán)限的前提, 如果沒有BLUETOOTH權(quán)限, 就不能使用BLUETOOTH_ADMIN權(quán)限;

      二 API詳解

      1. 常量介紹

      廣播的小規(guī)律 : 根據(jù)廣播的名稱可以猜測廣播的類型, 如果廣播常量名稱后面帶著ED, 是過去時(shí), 那么這個(gè)廣播是需要注冊接收的廣播, 如ACTION_DISCOVERY_STARTED, 這是藍(lán)牙設(shè)備開始搜索發(fā)出的廣播;

      如果廣播常量名稱不是ED結(jié)尾的, 那么這個(gè)是可以自己發(fā)送的廣播, 例如藍(lán)牙開啟廣播 : ACTION_REQUEST_ENABLE(藍(lán)牙可用), ACTION_REQUEST_DISCOVERABLE(藍(lán)牙可見);

      低級連接與高級連接 : ACL連接是低級連接, RFCOMM, L2CAP等連接是高級連接; 高級別的連接基于低級別的連接;

      (1)ACL連接相關(guān)廣播常量

      ACL連接 : 該連接是一種低級別的連接, ACL連接通過Android藍(lán)牙棧自動(dòng)進(jìn)行管理;

      String ACTION_ACL_CONNECTED : android.bluetooth.device.action.ACL_CONNECTED,與遠(yuǎn)程設(shè)備建立了ACL連接發(fā)出的廣播, 包含EXTRA_DEVICE附加域, 該附加域中存放的是BluetoothDevice對象, 需要BLUETOOTH權(quán)限;

      String ACTION_ACL_DISCONNECTED : android.bluetooth.device.action.ACL_DISCONNECTED,與遠(yuǎn)程設(shè)備斷開ACL連接后發(fā)出的廣播, 包含EXTRA_DEVICE附加域, 需要BLUETOOTH權(quán)限;

      String ACTION_ACL_DISCONNECT_REQUESTED : android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED, 底層發(fā)出斷開連接請求,ACL連接即將斷開; 友好的斷開連接時(shí)都會(huì)發(fā)出這個(gè)廣播, 低級連接即將斷開的時(shí)候, 應(yīng)該馬上中斷高級連接; 需要BLUETOOTH權(quán)限;

      (2)遠(yuǎn)程設(shè)備的其它廣播常量

      String ACTION_BOND_STATE_CHANGED : android.bluetooth.device.action.BOND_STATE_CHANGED, 遠(yuǎn)程藍(lán)牙設(shè)備狀態(tài)改變的時(shí)候發(fā)出這個(gè)廣播, 例如設(shè)備被匹配, 或者解除配對; 該廣播包含的附加域有 : EXTRA_DEVICE, EXTRA_BOND_STATE, EXTRA_BOND_PREVIOUS_STATE; 需要BLUETOOTH權(quán)限;

      String ACTION_CLASS_CHANGED : android.bluetooth.device.action.CLASS_CHANGED, 一個(gè)遠(yuǎn)程設(shè)備的綁定狀態(tài)發(fā)生改變時(shí)發(fā)出廣播, 該廣播附加域有 EXTRA_DEVICE, EXTRA_BOND_STATE; 需要BLUETOOTH權(quán)限;

      String ACTION_FOUND : android.bluetooth.device.action.FOUND,發(fā)現(xiàn)一個(gè)遠(yuǎn)程設(shè)備的時(shí)候發(fā)出該廣播; 這個(gè)廣播總是包含EXTRA_DEVICE, EXTRA_CLASS附加域, 如果這個(gè)藍(lán)牙可用的話, 還會(huì)包含EXTRA_NAME, EXTRA_RSSI附加域; 需要BLUETOOTH權(quán)限;

      String ACTION_NAME_CHANGED : android.bluetooth.device.action.NAME_CHANGED,遠(yuǎn)程藍(lán)牙設(shè)備的名稱被發(fā)現(xiàn)改變 或者 第一次發(fā)現(xiàn)遠(yuǎn)程藍(lán)牙設(shè)備的名稱的時(shí)候發(fā)出該廣播, 該廣播包含附加域 EXTRA_DEVICE , EXTRA_NAME附加域; 需要BLUETOOTH權(quán)限;

      (3)綁定狀態(tài)常量

      已綁定 : intBOND_BONDED , 值為12; 遠(yuǎn)程設(shè)備已經(jīng)匹配; 本地存儲(chǔ)了一個(gè)該遠(yuǎn)程設(shè)備的共享連接, 本地設(shè)備和遠(yuǎn)程設(shè)備之間的通信可以被認(rèn)證和加密; 這個(gè)連接不是已經(jīng)連接成功, 時(shí)刻保持連接狀態(tài), 這個(gè)連接的作用是, 下次連接的時(shí)候不用再次建立新的藍(lán)牙連接;

      綁定中 : intBOND_BONDING, 值為11; 本地設(shè)備與遠(yuǎn)程設(shè)備正在匹配中;

      未匹配 : intBOND_NONE, 值為10; 本地設(shè)備與遠(yuǎn)程設(shè)備沒有連接, 本地不存在與遠(yuǎn)程設(shè)備共享的連接, 設(shè)備間的通信不能被認(rèn)證和加密;

      (4)附加域常量

      綁定狀態(tài) : StringEXTRA_BOND_STATE, int附加域, 值為android.bluetooth.device.extra.BOND_STATE, 這個(gè)附加域是ACTION_BOND_STATE_CHANGED的附加域, 可能的值為 BOND_BONDED, BOND_BONDING, BOND_NONE;

      上一個(gè)綁定狀態(tài) : StringACTION_PREVIOUS_BOND_STATE, int附加域, 存放遠(yuǎn)程設(shè)備綁定狀態(tài), 值為"android.bluetooth.device.extra.PREVIOUS_BOND_STATE", 該附加域是ACTION_BOND_STATE_CHANGED廣播的附加域;

      BluetoothClass : StringEXTRA_CLASS, Parcelable BluetoothClass附加域, 存放BluetoothClass對象; 值為android.bluetooth.device.extra.CLASS, 這個(gè)附加域是ACTION_FOUND , ACTION_CLASS_CHANGED 廣播的附加域;

      BluetoothDevice : StringEXTRA_DEVICE, Parcelable BluetoothDevice附加域, 存放BluetoothDevice對象, 值為"android.bluetooth.device.extra.DEVICE", ?幾乎該類中的每個(gè)廣播都有該附加域;

      藍(lán)牙名稱 : StringEXTRA_NAME, 藍(lán)牙名稱附加域, 存放藍(lán)牙名稱, 值為"android.bluetooth.device.extra.NAME", 這個(gè)附加域是ACTION_NAME_CHANGED , ACTION_FOUND廣播的附加域;

      信號強(qiáng)度 : StringEXTRA_RSSI, 短整型附加域, 存放遠(yuǎn)程設(shè)備信號強(qiáng)度值; 值為"android.bluetooth.device.extra.NAME";

      2.?公共方法介紹

      (1)封裝到Parcel方法

      public void writeToParcel (Parcel out, int flags)

      參數(shù) : out , 要封裝到的目的對象; flags , 對象如何被寫入的附加標(biāo)志;

      【Android 應(yīng)用開發(fā)】BluetoothDevice詳解

      (2)描述內(nèi)容

      public int describeContents ()

      (2)建立BluetoothSocket連接

      public BluetoothSocket createRfcommSocketToServiceRecord (UUID uuid)

      作用 : 創(chuàng)建BluetoothSocket連接對象, 該方法創(chuàng)建的BluetoothSocket連接對象與 BluetoothAdapter的listenUsingRfcommWithServiceRecord方法創(chuàng)建的BluetoothServerSocket連接是對應(yīng)的, 調(diào)用BluetoothSocket對象的connect()方法創(chuàng)建一個(gè)連接, 通過UUID執(zhí)行對應(yīng)信道的SDP查找動(dòng)作;

      如果兩個(gè)安卓手機(jī)之間進(jìn)行連接需要生成專用的UUID, 如果是對藍(lán)牙串口進(jìn)行連接, 就使用總所周知的SPP UUID 00001101-0000-1000-8000-00805F9B34FB

      參數(shù) : 用來識別遠(yuǎn)程藍(lán)牙設(shè)備的UUID, 該UUID用來查詢RFCOMM通道的服務(wù)記錄;

      返回值 : 創(chuàng)建的BluetoothSocket連接對象

      (3)比較方法

      public boolean equals (Object o)

      參數(shù) : 對比的對象

      返回值 : 如果兩個(gè)對象相等, 返回true, 反之返回false;

      (4)獲取藍(lán)牙地址

      public String getAddress ()

      (5)獲取藍(lán)牙類

      public BluetoothClass getBluetoothClass ()

      (6)獲取設(shè)備的綁定狀態(tài)

      public int getBondState ()

      作用 : 獲取遠(yuǎn)程設(shè)備的狀態(tài), 可能會(huì)是BOND_BONDED, BOND_BONDING, BOND_NONE中的一個(gè);

      (7)獲取設(shè)備的藍(lán)牙名稱

      public String getName ()

      作用 : 獲取遠(yuǎn)程的藍(lán)牙設(shè)備名稱

      (8)獲取哈希值

      public int hashCode ()

      作用 : 獲取哈希值, 可以重寫這個(gè)方法

      (9)字符串方法

      public int hashCode ()

      ,

      ,

      ,

      Android

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Hadoop環(huán)境搭建測試以及MapReduce實(shí)例實(shí)現(xiàn)
      下一篇:用 Deno 編寫一個(gè)簡單的 REST API
      相關(guān)文章
      亚洲精品线路一在线观看| 亚洲国产成人精品久久| 亚洲色av性色在线观无码| 亚洲AV综合色区无码一区爱AV | 亚洲av无码乱码国产精品fc2| 国产一区二区三区亚洲综合| 亚洲A∨精品一区二区三区下载| 久久综合久久综合亚洲| 国产精品亚洲精品观看不卡| 亚洲国产韩国一区二区| 亚洲理论片在线观看| 亚洲成A∨人片在线观看无码| 亚洲精品国产手机| 亚洲第一页在线播放| 亚洲第一页在线播放| 亚洲精品综合久久中文字幕| 亚洲成a人不卡在线观看| 亚洲精品不卡视频| 亚洲国产成人手机在线电影bd | 亚洲av无码片vr一区二区三区| 亚洲高清一区二区三区电影| 亚洲JLZZJLZZ少妇| 国产成人亚洲综合无| 亚洲成a人无码av波多野按摩 | 亚洲精品国产肉丝袜久久| 久久精品国产亚洲av高清漫画| 精品日韩亚洲AV无码一区二区三区 | 亚洲免费视频播放| 亚洲精品福利你懂| 亚洲精品一卡2卡3卡四卡乱码| 亚洲av永久无码一区二区三区| 国产精品亚洲综合一区在线观看| 国产亚洲男人的天堂在线观看| 亚洲无码精品浪潮| 亚洲精品成人无限看| 久久精品亚洲精品国产色婷 | 精品国产亚洲一区二区三区在线观看| 爱情岛亚洲论坛在线观看| 亚洲视频一区二区| 亚洲成av人影院| 亚洲欧洲日产韩国在线|