當前位置:首頁 » 安卓系統 » android藍牙許可權

android藍牙許可權

發布時間: 2022-06-27 07:16:10

① 如何使用Android藍牙開發

Android平台支持藍牙網路協議棧,實現藍牙設備之間數據的無線傳輸。本文檔描述了怎樣利用android平台提供的藍牙API去實現藍壓設備之間的通信。藍牙具有point-to-point 和 multipoint兩種連接功能。
使用藍牙API,可以做到:
* 搜索藍牙設備
* 從本地的Bluetooth adapter中查詢已經配對的設備
* 建立RFCOMM通道
* 通過service discovery連接到其它設備
* 在設備之間傳輸數據
* 管理多個連接

基礎知識
本文檔介紹了如何使用Android的藍牙API來完成的四個必要的主要任務,使用藍牙進行設備通信,主要包含四個部分:藍牙設置、搜索設備(配對的或可見的)、連接、傳輸數據。
所有的藍牙API在android.bluetooth包中。實現這些功能主要需要下面這幾個類和介面:

BluetoothAdapter
代表本地藍牙適配器(藍牙發射器),是所有藍牙交互的入口。通過它可以搜索其它藍牙設備,查詢已經配對的設備列表,通過已知的MAC地址創建BluetoothDevice,創建BluetoothServerSocket監聽來自其它設備的通信。

BluetoothDevice
代表了一個遠端的藍牙設備, 使用它請求遠端藍牙設備連接或者獲取 遠端藍牙設備的名稱、地址、種類和綁定狀態。 (其信息是封裝在 bluetoothsocket 中) 。

BluetoothSocket
代表了一個藍牙套接字的介面(類似於 tcp 中的套接字) ,他是應用程 序通過輸入、輸出流與其他藍牙設備通信的連接點。

BluetoothServerSocket
代表打開服務連接來監聽可能到來的連接請求 (屬於 server 端) , 為了連接兩個藍牙設備必須有一個設備作為伺服器打開一個服務套接字。 當遠端設備發起連 接連接請求的時候,並且已經連接到了的時候,Blueboothserversocket 類將會返回一個 bluetoothsocket。

BluetoothClass
描述了一個設備的特性(profile)或該設備上的藍牙大致可以提供哪些服務(service),但不可信。比如,設備是一個電話、計算機或手持設備;設備可以提供audio/telephony服務等。可以用它來進行一些UI上的提示。
BluetoothProfile

BluetoothHeadset
提供手機使用藍牙耳機的支持。這既包括藍牙耳機和免提(V1.5)模式。

BluetoothA2dp
定義高品質的音頻,可以從一個設備傳輸到另一個藍牙連接。 「A2DP的」代表高級音頻分配模式。

BluetoothHealth
代表了醫療設備配置代理控制的藍牙服務

BluetoothHealthCallback
一個抽象類,使用實現BluetoothHealth回調。你必須擴展這個類並實現回調方法接收更新應用程序的注冊狀態和藍牙通道狀態的變化。

② android藍牙4.0怎麼設置藍牙寫許可權

基本步驟:
獲取藍牙適配器BluetoothAdapter blueadapter=BluetoothAdapter.getDefaultAdapter();
如果BluetoothAdapter 為null,說明android手機沒有藍牙模塊。
判斷藍牙模塊是否開啟,blueadapter.isEnabled() true表示已經開啟,false表示藍牙並沒啟用。
啟動配置藍牙可見模式,即進入可配對模式Intent in=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 200);
startActivity(in); ,200就表示200秒。
獲取藍牙適配器中已經配對的設備Set<BluetoothDevice> device=blueadapter.getBondedDevices();
還需要在androidManifest.xml中聲明藍牙的許可權
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
接下來就是根據自己的需求對BluetoothAdapter 的操作了。

③ android 藍牙開發,在使用APP inventor編程後連接的時候出現了藍牙許可權問題,該怎麼解決啊。急啊。

每個App裡面都有一個Androidmanifest.xml文件,我最近也遇到這個問題。摸索了好久才明白的。在你用App Inventor生成App以後,你可以用Apptool之類的工具把App解壓,裡面就有一個Androidmanifest.xml文件,你打開以後添加你需要允許的許可權,保存。再用Apptool反編譯一下,反編譯後的App要經過簽名才能在android上安裝,不然在大部分情況下的都是裝不上的。像你這個情況的話直接在裡面適當的位置添加<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />就可以了

④ mission.BLUETOOTH|android.permission.BLUETOOTH_A

沒有藍牙的許可權 在manifest.xml裡面加上<uses-permission android:name="android.permission.BLUETOOTH" />和<uses-permission android:name="android.permission.BROADCAST_STICKY" />許可權

⑤ Android藍牙開發,我申請了藍牙許可權了。其他都還好,但是只要我一startDiscovery(),程序就蹦了,求指教

把<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>許可權都加上,還有就是把藍牙打開

⑥ Android的藍牙和iPhone的藍牙為什麼不能配對呀

蘋果手機需要越獄,否則安卓手機不可能和蘋果手機匹配藍牙,解決方法如下:

1、首先進入iphone SE系統界面,在其界面找到【設置】應用圖標,點擊進入。

⑦ Android開發 藍牙連接問題

Android 藍牙編程的基本步驟:
1.獲取藍牙適配器BluetoothAdapter blueadapter=BluetoothAdapter.getDefaultAdapter();
如果BluetoothAdapter 為null,說明android手機沒有藍牙模塊。
判斷藍牙模塊是否開啟,blueadapter.isEnabled() true表示已經開啟,false表示藍牙並沒啟用。
2.啟動配置藍牙可見模式,即進入可配對模式Intent in=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 200);
startActivity(in); ,200就表示200秒。
3.獲取藍牙適配器中已經配對的設備Set<BluetoothDevice> device=blueadapter.getBondedDevices();
4.還需要在androidManifest.xml中聲明藍牙的許可權
<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
接下來就是根據自己的需求對BluetoothAdapter 的操作了。

⑧ 菜鳥求解大神教教怎麼添加藍牙許可權

基本步驟:
獲取藍牙適配器BluetoothAdapter blueadapter=BluetoothAdapter.getDefaultAdapter();
如果BluetoothAdapter 為null,說明android手機沒有藍牙模塊。
判斷藍牙模塊是否開啟,blueadapter.isEnabled() true表示已經開啟,false表示藍牙並沒啟用。
啟動配置藍牙可見模式,即進入可配對模式Intent in=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 200);
startActivity(in); ,200就表示200秒。
獲取藍牙適配器中已經配對的設備Set<BluetoothDevice> device=blueadapter.getBondedDevices();
還需要在androidManifest.xml中聲明藍牙的許可權
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
接下來就是根據自己的需求對BluetoothAdapter 的操作了。

⑨ android藍牙通信要怎麼設計

Android平台支持藍牙網路協議棧,實現藍牙設備之間數據的無線傳輸。本文檔描述了怎樣利用android平台提供的藍牙API去實現藍壓設備之間的通信。藍牙具有point-to-point 和 multipoint兩種連接功能。
使用藍牙API,可以做到:
* 搜索藍牙設備
* 從本地的Bluetooth adapter中查詢已經配對的設備
* 建立RFCOMM通道
* 通過service discovery連接到其它設備
* 在設備之間傳輸數據
* 管理多個連接

基礎知識
本文檔介紹了如何使用Android的藍牙API來完成的四個必要的主要任務,使用藍牙進行設備通信,主要包含四個部分:藍牙設置、搜索設備(配對的或可見的)、連接、傳輸數據。
所有的藍牙API在android.bluetooth包中。實現這些功能主要需要下面這幾個類和介面:

BluetoothAdapter
代表本地藍牙適配器(藍牙發射器),是所有藍牙交互的入口。通過它可以搜索其它藍牙設備,查詢已經配對的設備列表,通過已知的MAC地址創建BluetoothDevice,創建BluetoothServerSocket監聽來自其它設備的通信。

BluetoothDevice
代表了一個遠端的藍牙設備, 使用它請求遠端藍牙設備連接或者獲取 遠端藍牙設備的名稱、地址、種類和綁定狀態。 (其信息是封裝在 bluetoothsocket 中) 。

BluetoothSocket
代表了一個藍牙套接字的介面(類似於 tcp 中的套接字) ,他是應用程 序通過輸入、輸出流與其他藍牙設備通信的連接點。

BluetoothServerSocket
代表打開服務連接來監聽可能到來的連接請求 (屬於 server 端) , 為了連接兩個藍牙設備必須有一個設備作為伺服器打開一個服務套接字。 當遠端設備發起連 接連接請求的時候,並且已經連接到了的時候,Blueboothserversocket 類將會返回一個 bluetoothsocket。

BluetoothClass
描述了一個設備的特性(profile)或該設備上的藍牙大致可以提供哪些服務(service),但不可信。比如,設備是一個電話、計算機或手持設備;設備可以提供audio/telephony服務等。可以用它來進行一些UI上的提示。
BluetoothProfile

BluetoothHeadset
提供手機使用藍牙耳機的支持。這既包括藍牙耳機和免提(V1.5)模式。

BluetoothA2dp
定義高品質的音頻,可以從一個設備傳輸到另一個藍牙連接。 「A2DP的」代表高級音頻分配模式。

BluetoothHealth
代表了醫療設備配置代理控制的藍牙服務

BluetoothHealthCallback
一個抽象類,使用實現BluetoothHealth回調。你必須擴展這個類並實現回調方法接收更新應用程序的注冊狀態和藍牙通道狀態的變化。


代表一個應用程序的配置,藍牙醫療第三方應用注冊與遠程藍牙醫療設備交流。

BluetoothProfile.ServiceListener
當他們已經連接到或從服務斷開時通知BluetoothProfile IPX的客戶時一個介面(即運行一個特定的配置文件,內部服務)。

藍牙許可權
為了在你的應用中使用藍牙功能,至少要在AndroidManifest.xml中聲明兩個許可權:BLUETOOTH(任何藍牙相關API都要使用這個許可權) 和 BLUETOOTH_ADMIN(設備搜索、藍牙設置等)。

為了執行藍牙通信,例如連接請求,接收連接和傳送數據都必須有BLUETOOTH許可權。

必須要求BLUETOOTH_ADMIN的許可權來啟動設備發現或操縱藍牙設置。大多數應用程序都需要這個許可權能力,發現當地的藍牙設備。此許可權授予其他的能力不應該使用,除非應用程序是一個「電源管理」,將根據用戶要求修改的藍牙設置

注釋:要請求BLUETOOTH_ADMIN的話,必須要先有BLUETOOTH。

在你的應用manifest 文件中聲明藍牙許可權。例如:

<manifest ... >
<uses-permission android:name="android.permission.BLUETOOTH" />
...
</manifest>
通過查看<uses-permission>資料來聲明應用許可權獲取更多的信息。

藍牙設置
在你的應用通過藍牙進行通信之前,你需要確認設備是否支持藍牙,如果支持,確信它被打開。

如果不支持,則不能使用藍牙功能。如果支持藍牙,但不能夠使用,你剛要在你的應用中請求使用藍牙。這個要兩步完成,使用BluetoothAdapter。

⑩ android 藍牙外設 誰是server 誰是client

Android平台支持藍牙網路協議棧,實現藍牙設備之間數據的無線傳輸。本文檔描述了怎樣利用android平台提供的藍牙API去實現藍壓設備之間的通信。藍牙具有point-to-point 和 multipoint兩種連接功能。使用藍牙API,可以做到: * 搜索藍牙設備 * 從本地的Bluetooth adapter中查詢已經配對的設備 * 建立RFCOMM通道 * 通過service discovery連接到其它設備 * 在設備之間傳輸數據 * 管理多個連接 基礎知識本文檔介紹了如何使用Android的藍牙API來完成的四個必要的主要任務,使用藍牙進行設備通信,主要包含四個部分:藍牙設置、搜索設備(配對的或可見的)、連接、傳輸數據。所有的藍牙API在android.bluetooth包中。實現這些功能主要需要下面這幾個類和介面: BluetoothAdapter 代表本地藍牙適配器(藍牙發射器),是所有藍牙交互的入口。通過它可以搜索其它藍牙設備,查詢已經配對的設備列表,通過已知的MAC地址創建BluetoothDevice,創建BluetoothServerSocket監聽來自其它設備的通信。 BluetoothDevice 代表了一個遠端的藍牙設備, 使用它請求遠端藍牙設備連接或者獲取 遠端藍牙設備的名稱、地址、種類和綁定狀態。 (其信息是封裝在 bluetoothsocket 中) 。 BluetoothSocket 代表了一個藍牙套接字的介面(類似於 tcp 中的套接字) ,他是應用程 序通過輸入、輸出流與其他藍牙設備通信的連接點。 BluetoothServerSocket 代表打開服務連接來監聽可能到來的連接請求 (屬於 server 端) , 為了連接兩個藍牙設備必須有一個設備作為伺服器打開一個服務套接字。 當遠端設備發起連 接連接請求的時候,並且已經連接到了的時候,Blueboothserversocket 類將會返回一個 bluetoothsocket。 BluetoothClass 描述了一個設備的特性(profile)或該設備上的藍牙大致可以提供哪些服務(service),但不可信。比如,設備是一個電話、計算機或手持設備;設備可以提供audio/telephony服務等。可以用它來進行一些UI上的提示。 BluetoothProfile BluetoothHeadset 提供手機使用藍牙耳機的支持。這既包括藍牙耳機和免提(V1.5)模式。 BluetoothA2dp 定義高品質的音頻,可以從一個設備傳輸到另一個藍牙連接。 「A2DP的」代表高級音頻分配模式。 BluetoothHealth 代表了醫療設備配置代理控制的藍牙服務 BluetoothHealthCallback 一個抽象類,使用實現BluetoothHealth回調。你必須擴展這個類並實現回調方法接收更新應用程序的注冊狀態和藍牙通道狀態的變化。 代表一個應用程序的配置,藍牙醫療第三方應用注冊與遠程藍牙醫療設備交流。 BluetoothProfile.ServiceListener 當他們已經連接到或從服務斷開時通知BluetoothProfile IPX的客戶時一個介面(即運行一個特定的配置文件,內部服務)。 藍牙許可權為了在你的應用中使用藍牙功能,至少要在AndroidManifest.xml中聲明兩個許可權:BLUETOOTH(任何藍牙相關API都要使用這個許可權) 和 BLUETOOTH_ADMIN(設備搜索、藍牙設置等)。 為了執行藍牙通信,例如連接請求,接收連接和傳送數據都必須有BLUETOOTH許可權。 必須要求BLUETOOTH_ADMIN的許可權來啟動設備發現或操縱藍牙設置。大多數應用程序都需要這個許可權能力,發現當地的藍牙設備。此許可權授予其他的能力不應該使用,除非應用程序是一個「電源管理」,將根據用戶要求修改的藍牙設置 注釋:要請求BLUETOOTH_ADMIN的話,必須要先有BLUETOOTH。 在你的應用manifest 文件中聲明藍牙許可權。例如: ... 通過查看資料來聲明應用許可權獲取更多的信息。 藍牙設置在你的應用通過藍牙進行通信之前,你需要確認設備是否支持藍牙,如果支持,確信它被打開。 如果不支持,則不能使用藍牙功能。如果支持藍牙,但不能夠使用,你剛要在你的應用中請求使用藍牙。這個要兩步完成,使用BluetoothAdapter。 1.獲取BluetoothAdapter 所有的藍牙活動請求BluetoothAdapter,為了獲取BluetoothAdapter,呼叫靜態方法getDefaultAdapter() 。這個會返回一個BluetoothAdapter,代表設備自己的藍牙適配器(藍牙無線電)。這個藍牙適配器應用於整個系統中,你的應用可以通過這個對象進行交互。如果getDefaultAdapter()返回null,則這個設備不支持藍牙。例如: BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (mBluetoothAdapter == null) { // Device does not support Bluetooth } 2.打開藍牙 其次。你需要確定藍牙能夠使用。通過isEnabled()來檢查藍牙當前是否可用。如果這個方法返回false,則藍牙不能夠使用。為了請求藍牙使用,呼叫startActivityForResult()與的ACTION_REQUEST_ENABLE動作意圖。通過系統設置中啟用藍牙將發出一個請求(不停止藍牙應用)。例如: if (mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } 對話框中顯示請求使用藍牙許可權。如果響應"Yes",這個進程完成(或失敗)後你的應用將能夠使用藍牙。 REQUEST_ENABLE_BT常量作為一個整型傳到startActivityForResult()中(值必須大於0),該系統傳回給你,在你onActivityResult()作為實現的requestCode參數。 如果調用藍牙成功,你的Activity就會在onActivityResult()中收到RESULT_OK結果,如果藍牙不能使用由於錯誤(或用戶響應「NO」那麼結果返回RESULT_CANCELED。 除了通過onActivityResult(),還可以通過監聽ACTION_STATE_CHANGED這個broadcast Intent來知道藍牙狀態是否改變。這個Intent包含EXTRA_STATE,EXTRA_PREVIOUS_STATE兩個欄位,分別代表新舊狀態。可能的值是STATE_TURNING_ON, STATE_ON, STATE_TURNING_OFF, 還有STATE_OFF。 小貼: Enabling discoverability 將自動啟用藍牙。如果您計劃執行藍牙活動之前,始終使設備可發現,你可以跳過上面的步驟2。參閱enabling discoverability。 搜索設備使用BluetoothAdapter可以通過設備搜索或查詢配對設備找到遠程Bluetooth設備。 Device discovery(設備搜索)是一個掃描搜索本地已使能Bluetooth設備並且從搜索到的設備請求一些信息的過程(有時候會收到類似「discovering」,「inquiring」或「scanning」)。但是,搜索到的本地Bluetooth設備只有在打開被發現功能後才會響應一個discovery請求,響應的信息包括設備名,類,唯一的MAC地址。發起搜尋的設備可以使用這些信息來初始化跟被發現的設備的連接。一旦與遠程設備的第一次連接被建立,一個pairing請求就會自動提交給用戶。如果設備已配對,配對設備的基本信息(名稱,類,MAC地址)就被保存下來了,能夠使用Bluetooth API來讀取這些信息。使用已知的遠程設備的MAC地址,連接可以在任何時候初始化而不必先完成搜索(當然這是假設遠程設備是在可連接的空間范圍內)。 需要記住,配對和連接是兩個不同的概念: 配對意思是兩個設備相互意識到對方的存在,共享一個用來鑒別身份的鏈路鍵(link-key),能夠與對方建立一個加密的連接。 連接意思是兩個設備現在共享一個RFCOMM信道,能夠相互傳輸數據。 目前Android Bluetooth API's要求設備在建立RFCOMM信道前必須配對(配對是在使用Bluetooth API初始化一個加密連接時自動完成的)。 下面描述如何查詢已配對設備,搜索新設備。 注意:Android的電源設備默認是不能被發現的。用戶可以通過系統設置讓它在有限的時間內可以被發現,或者可以在應用程序中要求用戶使能被發現功能。 查找匹配設備在搜索設備前,查詢配對設備看需要的設備是否已經是已經存在是很值得的,可以調用getBondedDevices()來做到,該函數會返回一個描述配對設備BluetoothDevice的結果集。例如,可以使用ArrayAdapter查詢所有配對設備然後顯示所有設備名給用戶: Set pairedDevices = mBluetoothAdapter.getBondedDevices(); // If there are paired devices if (pairedDevices.size() > 0) { // Loop through paired devices for (BluetoothDevice device : pairedDevices) { // Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName() + "n" + device.getAddress()); } }; BluetoothDevice對象中需要用來初始化一個連接唯一需要用到的信息就是MAC地址。 掃描設備要開始搜索設備,只需簡單的調用startDiscovery() 。該函數時非同步的,調用後立即返回,返回值表示搜索是否成功開始。搜索處理通常包括一個12秒鍾的查詢掃描,然後跟隨一個頁面顯示搜索到設備Bluetooth名稱。 應用中可以注冊一個帶ACTION_FOUND Intent的BroadcastReceiver,搜索到每一個設備時都接收到消息。對於每一個設備,系統都會廣播ACTION_FOUND Intent,該Intent攜帶著而外的欄位信息EXTRA_DEVICE和EXTRA_CLASS,分別包含一個BluetoothDevice和一個BluetoothClass。 下面的示例顯示如何注冊和處理設備被發現後發出的廣播: 代碼如下: // Create a BroadcastReceiver for ACTION_FOUND private final BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); // When discovery finds a device if (BluetoothDevice.ACTION_FOUND.equals(action)) { // Get the BluetoothDevice object from the Intent BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName() + "n" + device.getAddress()); } } }; // Register the BroadcastReceiver IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(mReceiver, filter); // Don't forget to unregister ring onDestroy 警告:完成設備搜索對於Bluetooth適配器來說是一個重量級的處理,要消耗大量它的資源。一旦你已經找到一個設備來連接,請確保你在嘗試連接前使用了cancelDiscovery()來停止搜索。同樣,如果已經保持了一個連接的時候,同時執行搜索設備將會顯著的降低連接的帶寬,所以在連接的時候不應該執行搜索發現。 使能被發現如果想讓本地設備被其他設備發現,可以帶ACTION_REQUEST_DISCOVERABLE action Intent調用startActivityForResult(Intent, int) 方法。該方法會提交一個請求通過系統剛設置使設備出於可以被發現的模式(而不影響應用程序)。默認情況下,設備在120秒後變為可以被發現的。可以通過額外增加EXTRA_DISCOVERABLE_DURATION Intent自定義一個值,最大值是3600秒,0表示設備總是可以被發現的(小於0或者大於3600則會被自動設置為120秒)。下面示例設置時間為300: Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); startActivity(discoverableIntent); ! 詢問用戶是否允許打開設備可以被發現功能時會顯示一個對話框。如果用戶選擇「Yes」,設備會在指定時間過後變為可以被發現的。Activity的onActivityResult()回調函數被調用,結果碼等於設備變為可以被發現所需時長。如果用戶選擇「No」或者有錯誤發生,結果碼會是Activity.RESULT_CANCELLED。 提示:如果Bluetooth沒有啟用,啟用Bluetooth可被發現功能能夠自動開啟Bluetooth。 在規定的時間內,設備會靜靜的保持可以被發現模式。如果想在可以被發現模式被更改時受到通知,可以用ACTION_SCAN_MODE_CHANGED Intent注冊一個BroadcastReceiver,包含額外的欄位信息EXTRA_SCAN_MODE和EXTRA_PREVIOUS_SCAN_MODE分別表示新舊掃描模式,其可能的值為SCAN_MODE_CONNECTABLE_DISCOVERABLE(discoverable mode),SCAN_MODE_CONNECTABLE(not in discoverable mode but still able to receive connections),SCAN_MODE_NONE(not in discoverable mode and unable to receive connections)。如果只需要連接遠程設備就不需要打開設備的可以被發現功能。只在應用作為一個伺服器socket的宿主用來接收進來的連接時才需要使能可以被發現功能,因為遠程設備在初始化連接前必須先發現了你的設備。 連接設備為了在兩台設備上創建一個連接,你必須在軟體上實現伺服器端和客戶端的機制,因為一個設備必須必須打開一個server socket,而另一個必須初始化這個連接(使用伺服器端設備的MAC地址進行初始化)。當伺服器端和客戶端在同一個RFCOMM信道上都有一個BluetoothSocket時,就可以認為它們之間建立了一個連接。在這個時刻,每個設備能獲得一個輸出流和一個輸入流,也能夠開始數據傳輸。本節介紹如何在兩個設備之間初始化一個連接。伺服器端和客戶端獲得BluetoothSocket的方法是不同的,伺服器端是當一個進入的連接被接受時才產生一個BluetoothSocket,客戶端是在打開一個到伺服器端的RFCOMM信道時獲得BluetoothSocket的。 一種實現技術是,每一個設備都自動作為一個伺服器,所以每個設備都有一個server socket並監聽連接。然後每個設備都能作為客戶端建立一個到另一台設備的連接。另外一種代替方法是,一個設備按需打開一個server socket,另外一個設備僅初始化一個到這個設備的連接。 Note: 如果兩個設備在建立連接之前並沒有配對,那麼在建立連接的過程中,Android框架將自動顯示一個配對請求的notification或者一個對話框,如Figure 3所示。所以,在嘗試連接設備時,你的應用程序無需確保設備之間已經進行了配對。你的RFCOMM連接將會在用戶確認配對之後繼續進行,或者用戶拒絕或者超時之後失敗。 作為伺服器連接如果要連接兩個設備,其中一個必須充當伺服器,通過持有一個打開的BluetoothServerSocket對象。伺服器socket的作用是偵聽進來的連接,如果一個連接被接受,提供一個連接好的BluetoothSocket對象。從BluetoothServerSocket獲取到BluetoothSocket對象之後,BluetoothServerSocket就可以(也應該)丟棄了,除非你還要用它來接收更多的連接。 下面是建立伺服器socket和接收一個連接的基本步驟: 1.通過調用(String, UUID)得到一個BluetoothServerSocket對象。 該字元串為服務的識別名稱,系統將自動寫入到一個新的服務發現協議(SDP)資料庫接入口到設備上的(名字是任意的,可以簡單地是應用程序的名稱)項。 UUID也包括在SDP接入口中,將是客戶端設備連接協議的基礎。也就是說,當客戶端試圖連接本設備,它將攜帶一個UUID用來唯一標識它要連接的服務,UUID必須匹配,連接才會被接受。 2.通過調用accept()來偵聽連接請求。 這是一個阻塞的調用,知道有連接進來或者產生異常才會返回。只有遠程設備發送一個連接請求,並且攜帶的UUID與偵聽它socket注冊的UUID匹配,連接請求才會被接受。如果成功,accept()將返回一個連接好的BluetoothSocket對象。 3.除非需要再接收另外的連接,否則的話調用close() 。 close()釋放server socket和它的資源,但不會關閉連接accept()返回的連接好的BluetoothSocket對象。與TCP/IP不同,RFCOMM同一時刻一個信道只允許一個客戶端連接,因此大多數情況下意味著在BluetoothServerSocket接受一個連接請求後應該立即調用close()。 accept()調用不應該在主Activity UI線程中進行,因為這是個阻塞的調用,會妨礙其他的交互。經常是在在一個新線程中做BluetoothServerSocket或BluetoothSocket的所有工作來避免UI線程阻塞。注意所有BluetoothServerSocket或BluetoothSocket的方法都是線程安全的。 下面是一個簡單的接受連接的伺服器組件代碼示例: private class AcceptThread extends Thread { private final BluetoothServerSocket mmServerSocket; public AcceptThread() { // Use a temporary object that is later assigned to mmServerSocket, // because mmServerSocket is final BluetoothServerSocket tmp = null; try { // MY_UUID is the app's UUID string, also used by the client code tmp = mBluetoothAdapter.(NAME, MY_UUID); } catch (IOException e) { } mmServerSocket = tmp; } public void run() { BluetoothSocket socket = null; // Keep listening until exception occurs or a socket is returned while (true) { try { socket = mmServerSocket.accept(); } catch (IOException e) { break; } // If a connection was accepted if (socket != null) { // Do work to manage the connection (in a separate thread) manageConnectedSocket(socket); mmServerSocket.close(); break; } } } /* * Will cancel the listening socket, and cause the thread to finish * / public void cancel() { try { mmServerSocket.close(); } catch (IOException e) { } }

熱點內容
把什麼塗在密碼鎖上能看到密碼 發布:2025-04-23 04:29:40 瀏覽:242
sql2000密碼忘記 發布:2025-04-23 04:22:03 瀏覽:21
安卓手機退出應用怎麼絲滑 發布:2025-04-23 04:17:46 瀏覽:107
小米全盤加密 發布:2025-04-23 04:14:24 瀏覽:741
pac腳本代理伺服器地址 發布:2025-04-23 04:08:44 瀏覽:954
5g編程 發布:2025-04-23 03:59:14 瀏覽:293
kafka源碼分析 發布:2025-04-23 03:57:41 瀏覽:16
企鵝存儲罐 發布:2025-04-23 03:57:00 瀏覽:437
掛機怎樣做腳本 發布:2025-04-23 03:45:33 瀏覽:534
康海串口伺服器ip設置 發布:2025-04-23 03:44:36 瀏覽:336