A. android 藍牙連接時候那個彈出框是怎麼實現的
主線程啟動processDialog
子線程進行連接
連接完畢桐彎後通過轎春handler通知主閉輪耐線程結束processDialog。
B. android藍牙連接成功後沒有返回狀態
沒有返回狀態說明連接成功。
也就是說鏈路層的數據只存在發送成功(可能經過重發N次後成功),或者連接斷開,不存在失敗的可能性,也就無所謂返回狀態的區別。
onCharacteristicWrite返回的status狀態看一下API就知道了,都是GATT開頭的各種常量,也就是說從設備一定是接收到了數據,但是數據從鏈路層轉發到GATT層的過程中可能存在各種異常情況,導致返回錯誤。需要注意的是應用層無法決定這個返回狀態,比如說如果從設備的應用層知虧猛接收到數據後發現不符合自己空激定義的介面數據協議規范搭橋,那麼也只能通過另外發起notify來通知主設備,而無法通過status來返回錯誤類型。
C. Android 藍牙開發(一)
普通藍牙設備官方文檔
Android 平台包含藍牙網路堆棧支持 ,憑藉此支持,設備能以無線方式與其他藍牙設備交換數據。應用框架提供了通過 Android Bluetooth API 訪問藍牙功能的途徑。使用 Bluetooth API Android 應用可以執行下面的操作:
傳統藍牙適用於電池使用強度較大的操作,例如 Android 設備之間的流傳輸和通信等。針對具有低功耗要求的藍牙設備,Android 4.3(API 18)中引入了面向低功耗藍牙的 API 支持。
使用 Android Bluetooth API 來完成使用藍牙進行通信的四項主要任務: 設置藍牙 、 查找局部區域內的配對設備或可用設備 、 連接設備 ,以及在 設備之間傳輸數據 。
關於藍牙的 API 在 android.bluetooth 包中,下面介紹一下和藍牙相關的主要類:
在 BluetoothProfile IPC 客戶端連接到服務(即,運行特定配置文件的內部服務)或斷開服務連接時向其發送通知的介面。
使用藍牙必須聲明許可權 BLUETOOTH 才可以執行藍牙通信。
1、獲取藍牙適配器
例如:我們可以查詢所有已配對的設備,然後使用 ArrayAdapter 向用戶顯示每台設備的名稱:
要發起連接僅需要知道目標藍牙設備的 Mac 地址就可以了。
注意 執行 discovery 對於藍牙適配器來說是一個非常繁重的過程,並且會消耗大量資源。在找到要連接的設備後, 要確保使用 cancelDiscovery() 來停止發現,然後嘗試連接 。如果您已經和某台設備進行連接,那麼這個時候執行發現操作會大幅度的減少此連接可用的帶寬!因此不應該在處於連接狀態的時候執行發現操作!
例如:
在連接之前如果兩個設備沒有配對,則系統會自動發出配對請求。
伺服器套接字接受連接的基本過程
放在子線程中去執行。
例子:
客戶端連接的基本過程
調用 connect() 的時候要確保客戶端沒有執行發現操作。如果執行了會大幅度降低連接的速度,增加失敗的可能。
例子
在連接之前調用 cancleDiscovery() 在進行連接之前應該始終調用這個方法,而且調用的時候無需檢測是否正在掃描。
過程:
從 Android 3.0 開始, Bluetooth API 便支持使用藍牙配置文件。藍牙配置文件是適用於設備間藍牙通信的無線介面規范。
1、藍牙配置文件就是設備間通信(藍牙設備)的一種規范
免提配置文件便是一個示例,對於連接到無線耳機的手機,兩台設備都必須支持免提配置文件。我們也可以通過實現介面 BluetoothProfile 來寫入自己的類來支持特定的藍牙配置文件。Android API 提供了以下的幾種藍牙配置文件的實現:
2、使用配置文件的基本步驟
創建 HDP 應用:
關於普通藍牙設備和普通藍牙設備之間的連接通信
關於藍牙設備和藍牙儀器(藍牙耳機、電子秤等等類似產品)
這種之間的通信是通過配置文件代理來實現的。
都有一個對應的配置文件代理類。具體的操作是通過這個對象來完成。
參考: https://mp.weixin.qq.com/s?__biz=MzU5NzA2NjQzMg==&mid=2247484128&idx=1&sn=&scene=21#wechat_redirect
D. android 藍牙4.0怎麼通過setcharacteristicnotification來接收信息
最近接了一個新項目頃悔,但是對於藍牙BLE並不大了解。。。這個問題卡我我很久。。一直不知春飢道是哪裡錯了。onCharacteristicChanged這個方法一直不回調
我的項目需要連接一個藍牙4.0的設備,用Android BLE 我這邊設置了掃描到藍牙有一雀森正個服務,三個特徵,分別是 indicate,write,read。我在鏈接設備後。然後訂閱indicate的 characteristic
mBluetoothLeService.setCharacteristicNotification(mNotifyCharacteristic, true);
mBluetoothLeService.java
public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic, boolean enabled) {
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
Log.w(TAG, "BluetoothAdapter not initialized");
return;
}
E. android開發中如何增加藍牙連接成功後彈出一個toast進行提示
用 handler
在activity裡面聲明一個 handler
1、如果藍牙連接是一個類,把handler傳入藍牙的類
當藍牙連接成功之後,Message mes = handler.obtainMessage();用mes發個消息。然後在activity裡面的handler裡面進行處理就可以了。
2.如果藍牙連接在一個類裡面。那就直接用
當藍牙連接成功之後,Message mes = handler.obtainMessage();用mes發個消息。然後在activity裡面的handler裡面進行處理就可以了。
我一般都用service 處理藍牙 以為要循環連接和搜索。也可以用廣播。
F. 安卓系統手錶藍牙安裝第三方軟體可以嗎
可以。1. 工具箱安裝
運行
安裝程序,一直按下一步,最好不要修改安裝目錄。務必關閉殺毒軟體,否則會影響adb的安裝。
2. 運行工具箱
按軟體內文字提示操作,開啟工具箱。該安裝adb就跟著安裝。
3.調試
連接電腦與手錶,用充電器即可。
開啟調試
(此處為ow2操作)進入手錶設置——>其他設置——>關於手錶——>連按版本號打開開發者選項——>回到其他設置,進入開發者選項——>開啟USB模式——>選擇文件傳輸
這時手錶會彈出白色的授權界面,點擊授權即可
G. android藍牙設置了notify通知,但是發送不了數據
對指定的服務藍牙對象進行初始化。
具體問題應該是代碼書寫過程中,出現了邏輯錯誤等不易發雀慶肆現的錯誤類型,代碼書寫並無實質性錯誤。這才導致發送不了數據。
這個的實現主要依賴於代碼的正差虛確頃轎性,代碼是實現發送和接受數據的關鍵,如果自己發現不了錯誤,可以尋求專業人士的幫助。代碼改正不正確可能會導致出現更多的錯誤。
H. Android保活——藍牙喚醒(主動kill掉也可喚醒)
項目需要後台保活,但無論怎麼保活,只要用戶主動kill掉,app依然是活不了。
發現了藍牙喚醒這個方式,用戶主動kill掉也可行。
Android 8.0開始提供猜差了 startscan的方法,
public void startScan(ScanCallback callback)
public void startScan(List<ScanFilter> filters,ScanSettings settings,ScanCallback callback)
public int startScan(List<ScanFilter> filters,ScanSettings settings,PendingIntent callbackIntent)
第一個沒有過濾條件,鎖屏就停止掃描
第二個可以加過濾條件,鎖屏不影響掃描
第三個的掃描結果由PendingIntent發送,即使app沒有在運行,系統也可以掃描後喚醒app,這就是我們要的方法了。
PendingIntent是對Intent的封裝,是滿足某些條件或觸發某些事件後才執行指定的行為,主要用於鬧鍾、通知、桌面部件。Android的四大組件之間通信用Intent,跨進程通信用PendingIntent。
Android 8.0 引進了Context.startForegroundService(),在系統創建服務後,應纖神用需要在ANR發生前調用startForeground(int ,android.app.Notification),如果未及時調用該方法,系統將報ANR錯誤 。系統給前台服務的ANR時間是20秒。
用startScan藍牙喚醒的原理是:app向系統訂閱了掃描結果(預先加了過濾條件),當藍牙連接斷開的時候,設備就會發廣播,這時系統就可以掃描到對應的廣播,喚醒對應的service,這時想做什麼操作就根據你的項目需要了。至於系統會為你掃描多久,這個還沒測試。
(1)setScanMode有四個參數可以選 :
SCAN_MODE_BALANCED:在平衡電源模式下執行藍牙LE掃描。返回掃描結果的速度能夠很好地權衡掃描頻率和功耗。
SCAN_MODE_LOW_LATENCY:掃描使用最高占空比。建議只在應用程序在前台運行時使用此模式。
SCAN_MODE_LOW_POWER:在低功耗模式下執行藍牙LE掃描。這是默認的掃描模式,因為它消耗的能量最少。如果掃描應用程序不在前台,則強制執行此模式。
SCAN_MODE_OPPORTUNISTIC:一種特殊的藍牙LE掃描模式。使用這種掃描模式的應用程序將被動地偵聽其他掃描結果,而不啟動BLE掃描本身
(2)settingBuilder.setMatchMode有兩個參數可以選:
MATCH_MODE_AGGRESSIVE: 信號弱也會報告
MATCH_MODE_STICKY: 信號比較強和毀兆虧掃描到的次數比較多才會報告
(3)settingBuilder.setCallbackType也有其他參數可選,但適用的就一個
(4) ScanFilter 的過濾方法有幾個,如下圖,打勾的是測試了可行的,但只有第一個DeviceAddress有唯一性
I. 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。
J. 安卓手機安裝藍牙通知後死機是怎麼回事
1、第一種情況及解決方法:rom中存在大量的bug,導致手機頻繁死機。
這種情況下主要死機的情況一般為對系統進行一些設置時手機突然時機的情況,比如我們打開藍牙或是開啟WIFI就會導致手機死機沒有反應了,這種情況下大部分都是由BUG引起的,這時要做的就像是電腦出現問題時我們經常說的重裝系統一樣,不過手機的就需要對ROM進行更新。
1)打補丁。碼擾每個ROM在出來不久官方都會發布補丁或是一些論壇根據用戶的實際出現的問題做一些補丁,我們要及時的打補丁修復這些漏洞。
2)升級ROM。這種方法一般是我們信模雹經常選擇的方法,我們的手機出現問題時,我們一般都會選擇刷機來解決這種頻繁出現的問題,很多好的ROM都會為我們修復了漏洞,刷機可以使用刷機精靈等工具或SD升級,不同的手機有不同的要求和限制,刷機前做好備份是最重要的。
2、第二種情況及解決方法:運行程序導致CPU溫度過高或是各種數據運算時出現錯誤導致。
不同的CPU有著不同的負載能力,我們需要根據自己的手機安裝程序,不要看到什麼軟體好就安裝什麼軟體,有些軟體的處理機制有我們手機的CPU不符就無法運行,進入後導致手機黑屏死機。
1)不要長時間運行比較大型的游戲,注意手機後蓋上的溫度滑帆,有異常是及時結束掉相應的進程,避免死機。
2)使用完一個程序之後就要將其關閉,不要在後台運行過多的程序。有些時候在我們不知道情況下有些程序就會自動的運行,比如什麼水果忍者之類的游戲,都會自動後台獲取我們的地理位置等佔用手機進程。所以,如果你的手機CPU負載能力不夠就不要後台運行過多的程序,及時清理,避免死機。
3、第三種情況及解決方法:SD卡讀取錯導致手機死機。
這種情況一般出現子在我們在資源管理器中打開一些內存卡文件時出現死機,比如打開一個視頻文件或是音樂等出現死機。
1)刪除內存卡中沒用的文件,或是直接對內存卡進行格式化處理。
2)更換沒存卡。這種情況是你的內存卡和手機不兼容的請款下就需要更換內存卡來緩解手機運行的壓力從而解決死機問題。
4、第四種情況:軟體造成手機死機。
這種情況比較常見,一般我們使用某個軟體的時候就會發現手機突然會反應很慢,運行一段時間後就會出現死機的情況,後台運行程序也不多,手機也不熱,這就是軟體有問題。
這時直接將軟體拆卸即可,到官方或是一些其他的軟體市場重新下載。
5、第五種情況:病毒導致手機死機。
這種情況是比較常見的一種情況了,我們的手機防護措施相比電腦來說是很弱的,雖然有什麼360或是金山都沒有電腦的效果好。
1)恢復出廠設置。
2)進入Recover進行兩清。
3)SD升級,對系統進行徹底的還原。
注意事項
1、恢復出廠時一定還要注意備份你的聯系人信息。
2、刷機的話需要獲取root許可權。