日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android蓝牙开发

發布時間:2024/4/14 Android 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android蓝牙开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、配置權限

AndroidManifest.xml里加入權限

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

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

二、相關API

Android所有關于藍牙開發的類都在android.bluetooth包下:

1.BluetoothAdapter類

描述:

藍牙適配器,代表本地的藍牙適配器設備。BluetoothAdapter類讓用戶能執行基本的藍牙任務。例如: 初始化設備的搜索,查詢可匹配的設備集,使用一個已知的MAC地址來初始化一個BluetoothDevice類,創建一個 BluetoothServerSocket類以監聽其它設備對本機的連接請求等。

為了得到這個代表本地藍牙適配器的 BluetoothAdapter類,調用getDefaultAdapter()這一靜態方法。這是所有藍牙動作使用的第一步。當擁有本地適配器以后, 用戶可以獲得一系列的BluetoothDevice對象,這些對象代表所有擁有getBondedDevice()方法的已經匹配的設備;用 startDiscovery()方法來開始設備的搜尋;或者創建一個BluetoothServerSocket類,通過 listenUsingRfcommWithServiceRecord(String, UUID)方法來監聽新來的連接請求。

方法:

1)cancelDiscovery()?

  根據字面意思,是取消發現,也就是說當我們正在搜索設備的時候調用這個方法將不再繼續搜索

2)disable()關閉藍牙

3)enable()打開藍牙

  這個方法打開藍牙不會彈出提示,更多的時候我們需要問下用戶是否打開,一下這兩行代碼同樣是打開藍牙,不過會提示用戶:

  Intemtenabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

  startActivityForResult(enabler,reCode);//同startActivity(enabler);

4)getAddress()獲取本地藍牙地址

5)getDefaultAdapter()獲取默認BluetoothAdapter,實際上,也只有這一種方法獲取BluetoothAdapter

6)getName()獲取本地藍牙名稱

7)getRemoteDevice(String address)根據藍牙地址獲取遠程藍牙設備

8)getState()獲取本地藍牙適配器當前狀態(感覺可能調試的時候更需要)

9)isDiscovering()判斷當前是否正在查找設備,是返回true

10)isEnabled()判斷藍牙是否打開,已打開返回true,否則,返回false

11)listenUsingRfcommWithServiceRecord(String name,UUID uuid)根據名稱,UUID創建并返回BluetoothServerSocket,這是創建BluetoothSocket服務器端的第一步

12)startDiscovery()開始搜索,這是搜索的第一步

2.BluetoothDevice

描述

代表一個遠程藍牙設備。讓你創建一個帶有各自設備的BluetoothDevice或者查詢其皆如名稱、地址、類和連接狀態等信息。

對于藍牙硬件地址而言,這個類僅僅是一個瘦包裝器。這個類的對象是不可改變的。這個類上的操作會使用這個用來創建BluetoothDevice類的BluetoothAdapter類執行在遠程藍牙硬件上。

為了獲得BluetoothDevice,類,使用BluetoothAdapter.getRemoteDevice(String)方法去創建一個表示 已知MAC地址的設備(用戶可以通過帶有BluetoothAdapter類來完成對設備的查找)或者從一個通過 BluetoothAdapter.getBondedDevices()得到返回值的有聯系的設備集合來得到該設備。

方法

1)createRfcommSocketToServiceRecord(UUIDuuid)根據UUID創建并返回一個BluetoothSocket

這個方法也是我們獲取BluetoothDevice的目的——創建BluetoothSocket

2)getAddress()同BluetoothAdapter

3)getName()同BluetoothAdapter

3.BluetoothServerSocket

描述

一個藍牙監聽端口。?藍牙端口監聽接口和TCP端口類似:Socket和ServerSocket類。在服務器端,使用BluetoothServerSocket類來創建一個 監聽服務端口。當一個連接被BluetoothServerSocket所接受,它會返回一個新的BluetoothSocket來管理該連接。在客戶 端,使用一個單獨的BluetoothSocket類去初始化一個外接連接和管理該連接。

最通常使用的藍牙端口是RFCOMM,它是被Android API支持的類型。RFCOMM是一個面向連接,通過藍牙模塊進行的數據流傳輸方式,它也被稱為串行端口規范(Serial Port Profile,SPP)。

為了創建一個對準備好的新來的連接去進行監聽BluetoothServerSocket類,使用 BluetoothAdapter.listenUsingRfcommWithServiceRecord()方法。然后調用accept()方法去監 聽該鏈接的請求。在連接建立之前,該調用會被阻斷,也就是說,它將返回一個BluetoothSocket類去管理該連接。每次獲得該類之后,如果不再需 要接受連接,最好調用在BluetoothServerSocket類下的close()方法。關閉BluetoothServerSocket類不會關 閉這個已經返回的BluetoothSocket類。

BluetoothSocket類線程安全。特別的,close()方法總會馬上放棄外界操作并關閉服務器端口。

方法

1)accept()

  阻塞直到一個連接已經建立。(譯者注:默認超時時間設置為-1,見源碼)

? ? ?在一個成功建立的連接上返回一個已連接的BluetoothSocket類。

? ? ?每當該調用返回的時候,它可以在此調用去接收以后新來的連接。

2)accept(inttimeout)

  阻塞直到超時時間內的連接建立。

? ? ? 在一個成功建立的連接上返回一個已連接的BluetoothSocket類。

? ? ? 每當該調用返回的時候,它可以在此調用去接收以后新來的連接。

3)close()

  用來放棄從另一線程來的調用。

  馬上關閉端口,并釋放所有相關的資源。

  在其他線程的該端口中引起阻塞,從而使系統馬上拋出一個IO異常。

  關閉BluetoothServerSocket不會關閉接受自accept()的任意BluetoothSocket。

4.BluetoothSocket

描述

已連接或連接到藍牙套接字(socket)。

藍牙端口監聽接口和TCP端口類似:Socket和ServerSocket類。在服務器端,使用BluetoothServerSocket類來創建一個 監聽服務端口。當一個連接被BluetoothServerSocket所接受,它會返回一個新的BluetoothSocket來管理該連接。在客戶 端,使用一個單獨的BluetoothSocket類去初始化一個外接連接和管理該連接。

最通常使用的藍牙端口是RFCOMM,它是被Android API支持的類型。RFCOMM是一個面向連接,通過藍牙模塊進行的數據流傳輸方式,它也被稱為串行端口規范(Serial Port Profile,SPP)。

為了創建一個BluetoothSocket去連接到一個已知設備,使用方法 BluetoothDevice.createRfcommSocketToServiceRecord()。然后調用connect()方法去嘗試一個 面向遠程設備的連接。這個調用將被阻塞指導一個連接已經建立或者該鏈接失效。

為了創建一個BluetoothSocket作為服務端(或者“主機”),查看BluetoothServerSocket文檔。

每當該端口連接成功,無論它初始化為客戶端,或者被接受作為服務器端,通過getInputStream()和getOutputStream()來打開IO流,從而獲得各自的InputStream和OutputStream對象

BluetoothSocket類線程安全。特別的,close()方法總會馬上放棄外界操作并關閉服務器端口。

方法

1)close()?關閉

2)connect()?連接

3)getInptuStream()?獲取輸入流

4)getOutputStream()?獲取輸出流

5)getRemoteDevice()?獲取遠程設備,這里指的是獲取bluetoothSocket指定連接的那個遠程藍牙設備

三、操作

1、獲取本地藍牙適配器? ? ?

BluetoothAdapter mAdapter= BluetoothAdapter.getDefaultAdapter();

2、打開藍牙

if(!mAdapter.isEnabled()){//彈出對話框提示用戶是后打開 Intent enabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enabler, REQUEST_ENABLE);//不做提示,強行打開// mAdapter.enable(); }

3、搜索設備

BroadcastReceiver mReceiver = new BroadcastReceiver() {public void onReceive(Context context, Intent intent) {String action = intent.getAction();//找到設備if (BluetoothDevice.ACTION_FOUND.equals(action)) {BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);if (device.getBondState() != BluetoothDevice.BOND_BONDED) {Log.v(TAG, "find device:" + device.getName() + device.getAddress());}}//搜索完成else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {setTitle("搜索完成");if (mNewDevicesAdapter.getCount() == 0) {Log.v(TAG,"find over");}}//執行更新列表的代碼} };

onCreate()中代碼

?

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);registerReceiver(mReceiver, filter);filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);registerReceiver(mReceiver, filter);

?

4、建立連接

首先Android sdk(2.0以上版本)支持的藍牙連接是通過BluetoothSocket建立連接(說的不對請高人指正),服務器端(BluetoothServerSocket)和客戶端(BluetoothSocket)需指定同樣的UUID,才能建立連接,因為建立連接的方法會阻塞線程,所以服務器端和客戶端都應啟動新線程連接

1)服務器端:

?

//UUID格式一般是"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"可到//http://www.uuidgenerator.com 申請 BluetoothServerSocket serverSocket = mAdapter. listenUsingRfcommWithServiceRecord(serverSocketName,UUID);serverSocket.accept();

?

2)客戶端:

?

BluetoothSocket clienSocket=dcvice. createRfcommSocketToServiceRecord(UUID);clienSocket.connect();

?

5、數據傳遞,通過以上操作,就已經建立的BluetoothSocket連接了,數據傳遞無非是通過流的形式

1)獲取流

?

inputStream = socket.getInputStream();outputStream = socket.getOutputStream();

?

2)寫出、讀入

?

轉載于:https://www.cnblogs.com/goodpan/p/5198743.html

總結

以上是生活随笔為你收集整理的Android蓝牙开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。