A. 我在做一個通過android應用來控制小車的項目。我想問,小車上的藍牙設備,屬於伺服器端還是客戶端
一般來說,小車上的藍牙設備為客戶端。手機為服務端。
B. android藍牙設備上的標准串列怎麼看
藍牙串口實質上就是把可見的 傳統串口連接線 變成了 不可見得 無線 傳輸(藍牙)。
舉例:如果要使用單片機採集數據,通過藍牙串口 發回 電腦端實時處理
單片機 串口 TX 接藍牙串口模塊的RX, 單片機 RX 接到 藍牙串口模塊的TX
電腦端搜索藍牙串口模塊,配對(默認密碼一般為 1234,請參照模塊說明)
配對連接成功後會在設備管理器串口設備裡面新生成藍牙串口(如Bluetooth設備 鏈接上的標准串列(com17) - 請記住這一埠號
單片機通電運行,串口數據發送給藍牙串口模塊
電腦端通過上位機,或者串口助手等軟體,打開com17
這時候單片機發送的串口數據,就都可以實時在電腦端收到了注意事項:藍牙串口模塊的串口通訊波特率需要設置成跟單片機通訊波特率一致,否則會產生亂碼!
C. java中Android開發藍牙通信,一部手機能不能同時做服務端和客戶端。
一般的是不能的,看你的功耗大小,一般低功耗的都不行。
D. android藍牙中的有關問題,怎麼取消適配或跳過適配直接進行連接通信
1、就是說藍牙設備配對是不能避免,或者說不能跳過配對直接連接,對吧?
2、我用的是我們公司自己研發的物流機設備,我就是在學習Bluetoothchat demo,只是demo中用的是三個線程來管理這些的,我想忽略線程,但是總是會出現一個問題,就是客戶端發送數據給服務端,服務端能夠接收數據,但是我想服務端在接收到數據時再次返回數據給客戶端,這時候客戶端是接收不到的
E. Android開發之藍牙(Bluetooth)
在上一篇中有介紹了Wifi與網路連接處理
Android開發之WiFi與網路連接處理
下面,來繼續說說Android中藍牙的基本使用。
Bluetooth是目前使用的最廣泛的無線通訊協議之一,主要針對短距離設備通訊(10米),常用於連接耳機、滑鼠和移動通訊設備等。
值得一提的是:
android4.2新增了部分新功能,但是對於Bluetooth熟悉的人或許開始頭疼了,那就是Android4.2引入了一個新的藍牙協議棧針BLE。谷歌和Broadcom之間的合作,開發新的藍牙協議棧,取代了基於堆棧的Bluez。因此市場上出現了老設備的兼容問題,很多藍牙設備在android4.2手機上不能正常使用。
BluetoothAdapter簡單點來說就是代表了本設備(手機、電腦等)的藍牙適配器對象。
first:we need permission
要操作藍牙,先要在AndroidManifest.xml里加入許可權
**下面來看看如何使用藍牙。 **↓↓↓****
Demo已就緒:
返回值:如果設備具備藍牙功能,返回BluetoothAdapter 實例;否則,返回null對象。
打開藍牙設備的方式:
1.直接調用函數enable()去打開藍牙設備 ;
2.系統API去打開藍牙設備,該方式會彈出一個對話框樣式的Activity供用戶選擇是否打開藍牙設備。
注意: 1.如果藍牙已經開啟,不會彈出該Activity界面。2.在目前大多數Android手機中,是不支持在飛行模式下開啟藍牙的。如果藍牙已經開啟,那麼藍牙的開關 ,狀態會隨著飛行模式的狀態而發生改變。
1. 搜索藍牙設備
使用BluetoothAdapter的startDiscovery()方法來搜索藍牙設備
startDiscovery()方法是一個非同步方法,調用後會立即返回。該方法會進行對其他藍牙設備的搜索,該過程會持續12秒。該方法調用後,搜索過程實際上是在一個System Service中進行的,所以可以調用cancelDiscovery()方法來停止搜索(該方法可以在未執行discovery請求時調用)。
系統開始搜索藍牙設備
^( *  ̄(oo) ̄ ) ^ 系統會發送以下三個廣播:
2.掃描設備
3.定義廣播接收器接收搜索結果
4.注冊廣播
獲取附近的藍牙設備
第一步建立連接:首先Android sdk(2.0以上版本)支持的藍牙連接是通過BluetoothSocket建立連接,服務端BluetoothServerSocket和客戶端(BluetoothSocket)需指定同樣的UUID,才能建立連接,因為建立連接的方法會阻塞線程,所以伺服器端和客戶端都應啟動新線程連接。
(這里的服務端和客戶端是相對來說的)
兩個藍牙設備之間的連接,則必須實現服務端與客戶端的機制。
當兩個設備在同一個RFCOMM channel下分別擁有一個連接的BluetoothSocket,這兩個設備才可以說是建立了連接。
服務端設備與客戶端設備獲取BluetoothSocket的途徑是不同的。
1,服務端設備是通過accepted一個incoming connection來獲取的,
2,客戶端設備則是通過打開一個到服務端的RFCOMM channel來獲取的。
服務端
通過調用BluetoothAdapter的(String, UUID)方法來獲取BluetoothServerSocket(UUID用於客戶端與服務端之間的配對)
客戶端
調用BluetoothService的(UUID)方法獲取BluetoothSocket(該UUID應該同於服務端的UUID)。
調用BluetoothSocket的connect()方法(該方法為block方法),如果UUID同服務端的UUID匹配,並且連接被服務端accept,則connect()方法返回。
數據傳遞,通過以上操作,就已經建立的BluetoothSocket連接了,數據傳遞無非是通過流的形式
獲取流
該類就是關於遠程藍牙設備的一個描述。通過它可以和本地藍牙設備---BluetoothAdapter連接通信。
好多東西我也不知道怎麼描述,下面給出Demo:
剛好有剛學習的小夥伴問我ListView怎麼用,那我就用ListView。
源碼:
RairDemo
GitHub: https://github.com/Rairmmd/android-demo
Coding: https://coding.net/u/Rair/p/RairDemo/git
F. android藍牙程序開發中,如何確定一台手機當前是伺服器還是客戶端
首先,要操作藍牙,先要在AndroidManifest.xml里加入許可權
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permissionandroid:name="android.permission.BLUETOOTH" />
然後,看下api,Android所有關於藍牙開發的類都在android.bluetooth包下。 而需要用到了就只有幾個而已:
1.BluetoothAdapter 顧名思義,藍牙適配器,直到我們建立bluetoothSocket連接之前,都要不斷操作它BluetoothAdapter里的方法很多,常用的有以下幾個:cancelDiscovery() 根據字面意思,是取消發現,也就是說正在搜索設備的時候調用這個方法將不再繼續搜索disable()關閉藍牙enable()打開藍牙,這個方法打開藍牙不會彈出提示,更多的時候需要問下用戶是否打開,一下這兩行代碼同樣是打開藍牙,不過會提示用戶:Intemtenabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enabler,reCode);//同startActivity(enabler);
getAddress()獲取本地藍牙地址getDefaultAdapter()獲取默認BluetoothAdapter,實際上,也只有這一種方法獲取BluetoothAdaptergetName()獲取本地藍牙名稱getRemoteDevice(String address)根據藍牙地址獲取遠程藍牙設備getState()獲取本地藍牙適配器當前狀態(感覺可能調試的時候更需要)isDiscovering()判斷當前是否正在查找設備,是返回true***isEnabled()判斷藍牙是否打開,已打開返回true,否則,返回false***(String name,UUID uuid)根據名稱,UUID創建並返回BluetoothServerSocket,這是創建BluetoothSocket伺服器端的第一步startDiscovery()開始搜索,這是搜索的第一步。 2.BluetoothDevice看名字就知道,這個類描述了一個藍牙設備(UUIDuuid)根據UUID創建並返回一個BluetoothSocket這個方法也是我們獲取BluetoothDevice的目的——創建BluetoothSocket
這個類其他的方法,如getAddress(),getName(),同BluetoothAdapter;
3.BluetoothServerSocket如果去除了Bluetooth相信大家一定再熟悉不過了,既然是Socket,方法就應該都差不多,這個類一種只有三個方法
兩個重載的accept(),accept(inttimeout)兩者的區別在於後面的方法指定了過時時間,需要注意的是,執行這兩個方法的時候,直到接收到了客戶端的請求(或是過期之後),都會阻塞線程,應該放在新線程里運行。
還有一點需要注意的是,這兩個方法都返回一個BluetoothSocket,最後的連接也是伺服器端與客戶端的兩個BluetoothSocket的連接。
4.BluetoothSocket,跟BluetoothServerSocket相對,是客戶端一共5個方法,不出意外,都會用到close(),關閉connect()連接getInptuStream()獲取輸入流getOutputStream()獲取輸出流getRemoteDevice()獲取遠程設備,這里指的是獲取bluetoothSocket指定連接的那個遠程藍牙設備 。
G. 您好,我想問一下android藍牙程序,一端作為伺服器,可以同時連接幾個客戶端並接收其發來發來的數據嗎
我翻了好久以前的資料,終於翻到這份藍牙資料。。。因為可能別人也需要這份資料,我就把它傳到我的度網盤里共享了。共享附件也發了份。不知道是不是對你有用。因為我也只用過一次。但願能幫到你!望採納。
H. 關於android藍牙客戶端通訊開發,有沒有好用的第三方庫
國行的iPhone6與6 Plus上市也有一段時間了,用上的朋友應該不少。關於這款新品iPhone,你們應該了解它的一個新功能:Handoff。蘋果Handoff怎麼用,它好用嗎?下面小編就分享體驗了一段時間Handoff後的感受吧。總的來說,它有點雞肋。 今年早些時候,蘋果在全球開發者大會上宣布這一讓手機、平板與筆記本電腦互通互聯的新功能時,作為一個偽果粉,我其實還是有些小期待的。在我們此前有關iPhone6的報道與評測中也有提到這一Continuity功能。 然而,在周末遲來的升級體驗Handoff之後,我發現“美好的事情並沒有發生”。體驗的經過是這樣的,先來看看Handoff怎麼玩。 ◆准備:要有台iPhone、iPad或者Mac 想要體驗Handoff?你首先得有一台不算太老的iPhone,以及一台同樣不算太老的iPad或者Mac。平板電腦就算了,在我看來不是剛需。我准備的是支持藍牙4.0的iPhone6 Plus與Mac Book Pro(簡稱MBP),詳細可以參照下面的硬體要求。 硬體要求: ·MacBook Air(2012年貨之後的機型) ·MacBook Pro(2012年貨之後的機型) ·iMac(2012年貨之後的機型) ·Mac mini(2012年貨之後的機型) ·Mac Pro(2012年貨之後的機型) ·iPhone5及以上或iPad3及以上設備(如果2選1你不能同時擁有的話,那就看看熱鬧吧!) 看到這里,你或許會忍不住吐槽,如果買台最新的iPhone需要賣腎的話,那為了體驗Handoff,剩下的一個腎也保不住了。沒辦法,這就是蘋果的捆綁式銷售。 在使用Handoff功能的時候,你需要將MBP和iPhone6 Plus的藍牙與無線同時打開。值得一提的是,不要試圖將手機的藍牙與Mac配對連接,都開著就行,但是WiFi必須確保連的是同一個。 iPhone6 Plus的話,在“設置—通用”中找到“Handoff與建議的應用程序”,將這一功能開啟算是完成了iPhone部分的設置。 同時打開iPhone與Mac的Handoff 而Mac中也是在“設置—通用”中找到“允許在這台Mac和iCloud設備之間使用 Handoff”並確認即可,這一項默認是開啟的。 登陸同一個Apple ID 這些都完成後,你還要分別在iPhone和Mac上用相同的Apple ID來登錄,尤其是iCloud。如果有一台沒有登錄,那麼Handoff則無法使用。 說實話,當我把這些准備工作都做完之後,我並不能確定Handoff功能是否已經開啟,因此我認為後期蘋果應該進行優化,最起碼讓首次使用的用戶知道Handoff已經連接正常了。 ◆體驗:應用少 體驗差並且不穩定 為了驗證Handoff已經能夠正常使用,我在iPhone6 Plus上登陸了郵件進行測試,當我在手機上新建一封郵件後,又最小化到後台運行,這個時候,我終於看到我的MBP上的Dock欄上新增了一欄顯示Handoff連接的郵件應用:“郵件——來自**的iPhone”。 應用少用著雞肋 蘋果手機Handoff體驗 這個時候,也就能確定Handoff已經能夠正常使用了。看到這里,你或許要開始有點兒小失望了,這就是電腦與手機的互通?沒錯,目前看來就是這樣:Handoff就是讓你將在屏幕小的手機上不方便做的事轉移到屏幕更大的電腦上做。 除了郵件,其他像iWork套件也都是同理,但卻又與提醒、郵件等使用稍有不同。以Pages為例,我在手機上新建一個空白文檔,暫時寫了幾個字“Handoff測試”,如果按照之前郵件測試的方法,退出到後台之後,MBP上應該會有顯示,但是卻沒有,為何? 記得要iCloud共享鏈接 因為需要在“共享與列印”中,將這個文檔通過iCloud共享鏈接才能讓我在Mac上繼續未完的文檔。共享完成後,在Mac中找到iCloud Drive,點開後即可在Pages中找到手機中尚未完成的空白文檔。而Mac轉到iPhone中繼續編輯同理。 Mac端未注冊iMessage的用戶間無法使用 至於簡訊和電話,嚴格來說應該是iMessage與Facetime,從我的體驗來看,用另外一台安卓手機發送簡訊到iPhone6 Plus上,MBP上會有提示,但並不能夠顯示簡訊內容,而6P上卻正常。 也就是說,要想iPhone連Mac或者iPad體驗“電腦接聽手機電話”,你得確保聯系你的人用的是iPhone,並且將iMessage與Facetime都綁定了自己的賬號。並且Mac可不是手機,它並沒有通話記錄與撥號盤這類基本的手機應用。 從我身邊使用iPhone的朋友來看,沒用過這兩項功能的大有人在,這也就是Handoff比較雞肋的另外一個原因所在。因為你不能確保你的朋友和你一樣的高大上,即使你們都是蘋果三件套的擁有者,你的土豪朋友也不一定有心思擺弄這些設備。 需要在屏幕上滑才能顯示網頁,然後再點進去 隨後我也體驗了下網頁瀏覽,除了蘋果自帶的Safari,Google Chrome也能正常連接,但前提是確保你的Chrome是最新版。這項體驗給我最大的感受是,如果我肚子不舒服了想要去衛生間,那我可以接著在馬桶上用iPhone繼續瀏覽我未看完的網頁。嗯,最起碼我個人覺得很方便。 看到這里,你一定會想,支持Handoff都是蘋果自家的應用啊!其實這只是暫時的,蘋果對開發者開放的API介面可在將來實現第三方應用程序的Handoff支持。就我所知道第三方應用中,最新版的愛奇藝客戶端是支持的。 第三方應用體驗 但從我的體驗來看,也還是有瑕疵。我一開始很難在iPhone上發現我Mac上正在看的電視劇,需要我在手機的應用程序後台中找到。還是那句話,應該要有更為明確的提示,集成在一個APP中或許會更好。當然,這只是我個人的看法。 再補充一下另外一個更為雞肋的Instant Hotspot,蘋果官方是這么描述的:“只需在你的Mac上點擊幾下,即可打開你iPhone上的個人熱點。因此,只要你的iPhone在附近,你就可以使用你的Mac來上網。” 方便在哪兒呢?當我的Mac沒有網的時候,免去了從兜里或者背包中翻出iPhone開熱點。說白了就是支持Mac一鍵開關手機熱點。但從我個人的使用情況來看,我更願意用數據線連接,一邊藉助筆記本充電來補充個人熱點的耗電。 總結: 如文章開頭所說,這次期待中的Handoff體驗給我的感覺是失望的,它的局限性非常的明顯,需要蘋果三件套中任意兩套不算太舊的設備也就算了,目前看來應用太少,並且體驗過程也並不舒適。 和蘋果宣布的一樣,Handoff目前只能在Safari、Pages、Numbers、Keynote、地圖、信息、提醒事項、日歷和通訊錄之間配合使用,其他的第三方APP則少的可憐。 同時Handoff穩定性還不夠好,在Mac上操作時,點開與手機互聯的應用如郵件,有時候會出現“閃退”的情況,也就是說點一下並不能打開。 更多的槽就不吐了,在前面的體驗中很多也都已經指出了,雖然Handoff並不是我期待的那樣子,但它優點也是有的。首先它的多平台設備互通就是一種最大的創新,其次,不管是iCloud還是AirDrop在有些時候還是很方便的,如傳閱照片等。 只是局限在同一個WiFi與藍牙的連接,手機能做的事兒,我用手機就行了這就是目前很多人的使用習慣。並且手機關聯電腦後顯示,有秘密的人一定是不會用的。
I. android 為什麼藍牙客戶端先打開,伺服器端才能連接,有沒有解決辦法
因為連接伺服器,和藍牙用的是一個介面
J. 關於Android開發手機藍牙連接設備的,連接時出了問題可能是客戶端線程socket.connect()的問題
在sendMessage()之後,為什麼又重新創建線程了?
在seneMessage()之後,直接進行後續的收發處理就可以了。
沒有進行主動斷開操作之前,連接一般都是維持著的,不會斷開。
如果你重新創建線程,而線程裡面又向伺服器發起新的連接了,所以伺服器接收新連接後,很可能會切斷舊的連接。
不要把一個消息重復發送多次(發送隊列裡面已經存在了此消息)。如果想多次發送同樣的內容,就創建內容一樣的多個消息進行發送。