導航:首頁 > 操作系統 > androidble什麼

androidble什麼

發布時間:2022-08-22 14:19:56

android 藍牙BLE 該怎麼搞,我是想搞個中心和周邊 ,推送消息

Android4.3 規范了BLE的API,但是直到目前的4.4,還有些功能不完善。

在BLE協議中,有兩個角色,周邊(Periphery)和中央(Central);周邊是數據提供者,中央是數據使用/處理者;在iOS SDK裡面,可以把一個iOS設備作為一個周邊,也可以作為一個中央;但是在Android SDK裡面,直到目前最新的Android4.4.2,Android手機只能作為中央來使用和處理數據;那數據從哪兒來?從BLE設備來,現在的很多可穿戴設備都是用BLE來提供數據的。

一個中央可以同時連接多個周邊,但是一個周邊某一時刻只能連接一個中央。

大概了解了概念後,看看Android BLE SDK的四個關鍵類(class):

a)BluetoothGattServer作為周邊來提供數據;BluetoothGattServerCallback返回周邊的狀態。

b)BluetoothGatt作為中央來使用和處理數據;BluetoothGattCallback返回中央的狀態和周邊提供的數據。

因為我們討論的是Android的BLE SDK,下面所有的BluetoothGattServer代表周邊,BluetoothGatt代表中央。


一.創建一個周邊(雖然目前周邊API在Android手機上不工作,但還是看看)

a)先看看周邊用到的class,藍色橢圓

⑵ android ble開發 怎麼在後台 進入ble范圍自動提醒

目前在開發android
ble
方面,想要實現程序在後台運行,進入ble設備范圍就給用戶發送通知。我是通過把connectGatt(Context
context,
boolean
autoConnect,
BluetoothGattCallback
callback)
的自動連接參數設成true來判斷

⑶ android ble 自定義characteristic怎麼解析

本文將介紹BLE設備之間的數據傳輸,首先是數據的發送。數據的發送通過Characteristic完成,發送數據的Characteristic必須擁有寫許可權,即BluetoothGattCharacteristic類中的mProperties屬性必須為以下兩者中之一:
[java] view plain
/**
* 寫許可權:不需要響應
*/
public static final int PROPERTY_WRITE_NO_RESPONSE = 0x04;

/**
* 寫許可權:需要響應
*/
public static final int PROPERTY_WRITE = 0x08;
在BLE的連接過程中,連接成功後會返回一個BluetoothGatt類型變數(見上一篇文章的2.7步驟),該類封裝了BLE主要的操作。發送數據所需的Characteristic在BLE設備連接成功後的獲取Service的過程中獲得(見上一篇文章的2.10步驟),因此BLE的數據發送可以如下所示:

[java] view plain
@Override
public boolean writeCharacteristic(ICharacteristicBle chrBle) {
return mBleGatt.writeCharacteristic((BluetoothGattCharacteristic)chrBle);

⑷ android ble有哪些開源框架

你是用tcp還是http與伺服器通訊,tcp的話可以用socket,哪有 什麼框架,你要是用http的話 是你描述的那樣,我寫過一點用socket通訊的應用,但是沒有xml,struts,json什麼的東東,那些沒有用過

⑸ android ble為什麼要用service

BLE分為三部分Service、Characteristic、Descriptor,這三部分都由UUID作為唯一標示符。一個藍牙4.0的終端可以包含多個Service,一個Service可以包含多個Characteristic,一個Characteristic包含一個Value和多個Descriptor,一個Descriptor包含一個Value。一般來說,Characteristic是手機與BLE終端交換數據的關鍵,Characteristic有較多的跟許可權相關的欄位,例如PERMISSION和PROPERTY,而其中最常用的是PROPERTY,本文所用的BLE藍牙模塊竟然沒有標準的Characteristic的PERMISSION。Characteristic的PROPERTY可以通過位運算符組合來設置讀寫屬性,例如READ|WRITE、READ|WRITE_NO_RESPONSE|NOTIFY,因此讀取PROPERTY後要分解成所用的組合(本文代碼已含此分解方法)。

⑹ android ble搜到一個藍牙怎麼跟特徵值通信的

Generic Attribute Profile (GATT)
通過BLE連接,讀寫屬性類小數據的Profile通用規范。現在所有的BLE應用Profile都是基於GATT的。

Attribute Protocol (ATT)
GATT是基於ATT Protocol的。ATT針對BLE設備做了專門的優化,具體就是在傳輸過程中使用盡量少的數據。每個屬性都有一個唯一的UUID,屬性將以characteristics and services的形式傳輸。

Characteristic
Characteristic可以理解為一個數據類型,它包括一個value和0至多個對次value的描述(Descriptor)。

Descriptor
對Characteristic的描述,例如范圍、計量單位等。

Service
Characteristic的集合。例如一個service叫做「Heart Rate Monitor」,它可能包含多個Characteristics,其中可能包含一個叫做「heart rate measurement"的Characteristic。

二、角色和職責:

Android設備與BLE設備交互有兩組角色:

中心設備和外圍設備(Central vs. peripheral);
GATT server vs. GATT client.

Central vs. peripheral:
中心設備和外圍設備的概念針對的是BLE連接本身。Central角色負責scan advertisement。而peripheral角色負責make advertisement。

GATT server vs. GATT client:
這兩種角色取決於BLE連接成功後,兩個設備間通信的方式。

舉例說明:
現 有一個活動追蹤的BLE設備和一個支持BLE的Android設備。Android設備支持Central角色,而BLE設備支持peripheral角 色。創建一個BLE連接需要這兩個角色都存在,都僅支持Central角色或者都僅支持peripheral角色則無法建立連接。

當 連接建立後,它們之間就需要傳輸GATT數據。誰做server,誰做client,則取決於具體數據傳輸的情況。例如,如果活動追蹤的BLE設備需要向 Android設備傳輸sensor數據,則活動追蹤器自然成為了server端;而如果活動追蹤器需要從Android設備獲取更新信息,則 Android設備作為server端可能更合適。

三、許可權及feature:

和經典藍牙一樣,應用使用藍牙,需要聲明BLUETOOTH許可權,如果需要掃描設備或者操作藍牙設置,則還需要BLUETOOTH_ADMIN許可權:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

除了藍牙許可權外,如果需要BLE feature則還需要聲明uses-feature:
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

按時required為true時,則應用只能在支持BLE的Android設備上安裝運行;required為false時,Android設備均可正常安裝運行,需要在代碼運行時判斷設備是否支持BLE feature:

// Use this check to determine whether BLE is supported on the device. Then
// you can selectively disable BLE-related features.
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
finish();
}

四、啟動藍牙:

在使用藍牙BLE之前,需要確認Android設備是否支持BLE feature(required為false時),另外要需要確認藍牙是否打開。
如果發現不支持BLE,則不能使用BLE相關的功能。如果支持BLE,但是藍牙沒打開,則需要打開藍牙。

打開藍牙的步驟:

1、獲取BluetoothAdapter

BluetoothAdapter是Android系統中所有藍牙操作都需要的,它對應本地Android設備的藍牙模塊,在整個系統中BluetoothAdapter是單例的。當你獲取到它的示例之後,就能進行相關的藍牙操作了。

獲取BluetoothAdapter代碼示例如下:
// Initializes Bluetooth adapter.
final BluetoothManager bluetoothManager =
(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();

註:這里通過getSystemService獲取BluetoothManager,再通過BluetoothManager獲取BluetoothAdapter。BluetoothManager在Android4.3以上支持(API level 18)。

2、判斷是否支持藍牙,並打開藍牙

獲取到BluetoothAdapter之後,還需要判斷是否支持藍牙,以及藍牙是否打開。
如果沒打開,需要讓用戶打開藍牙:
private BluetoothAdapter mBluetoothAdapter;

// Ensures Bluetooth is available on the device and it is enabled. If not,
// displays a dialog requesting user permission to enable Bluetooth.
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

五、搜索BLE設備:

通過調用BluetoothAdapter的startLeScan()搜索BLE設備。調用此方法時需要傳入 BluetoothAdapter.LeScanCallback參數。
因此你需要實現 BluetoothAdapter.LeScanCallback介面,BLE設備的搜索結果將通過這個callback返回。

由於搜索需要盡量減少功耗,因此在實際使用時需要注意:

1、當找到對應的設備後,立即停止掃描;
2、不要循環搜索設備,為每次搜索設置適合的時間限制。避免設備不在可用范圍的時候持續不停掃描,消耗電量。

搜索的示例代碼如下:
/**
* Activity for scanning and displaying available BLE devices.
*/
public class DeviceScanActivity extends ListActivity {

private BluetoothAdapter mBluetoothAdapter;
private boolean mScanning;
private Handler mHandler;

// Stops scanning after 10 seconds.
private static final long SCAN_PERIOD = 10000;

private void scanLeDevice(final boolean enable) {
if (enable) {
// Stops scanning after a pre-defined scan period.
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mScanning = false;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
}, SCAN_PERIOD);

mScanning = true;
mBluetoothAdapter.startLeScan(mLeScanCallback);
} else {
mScanning = false;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}

}

}

如果你只需要搜索指定UUID的外設,你可以調用 startLeScan(UUID[], BluetoothAdapter.LeScanCallback)方法。
其中UUID數組指定你的應用程序所支持的GATT Services的UUID。

BluetoothAdapter.LeScanCallback的實現示例如下:
private LeDeviceListAdapter mLeDeviceListAdapter;

// Device scan callback.
private BluetoothAdapter.LeScanCallback mLeScanCallback =
new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, int rssi,
byte[] scanRecord) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mLeDeviceListAdapter.addDevice(device);
mLeDeviceListAdapter.notifyDataSetChanged();
}
});
}
};

注意:搜索時,你只能搜索傳統藍牙設備或者BLE設備,兩者完全獨立,不可同時被搜索。

六、連接GATT Server:

兩個設備通過BLE通信,首先需要建立GATT連接。這里我們講的是Android設備作為client端,連接GATT Server。
連接GATT Server,你需要調用BluetoothDevice的connectGatt()方法。此函數帶三個參數:Context、autoConnect(boolean)和BluetoothGattCallback對象。調用示例:

mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

函數成功,返回BluetoothGatt對象,它是GATT profile的封裝。通過這個對象,我們就能進行GATT Client端的相關操作。BluetoothGattCallback用於傳遞一些連接狀態及結果。

BluetoothGatt常規用到的幾個操作示例:

connect() :連接遠程設備。
discoverServices() : 搜索連接設備所支持的service。
disconnect():斷開與遠程設備的GATT連接。
close():關閉GATT Client端。
readCharacteristic(characteristic) :讀取指定的characteristic。
setCharacteristicNotification(characteristic, enabled) :設置當指定characteristic值變化時,發出通知。
getServices() :獲取遠程設備所支持的services。

等等。

註:
1、某些函數調用之間存在先後關系。例如首先需要connect上才能discoverServices。
2、 一些函數調用是非同步的,需要得到的值不會立即返回,而會在BluetoothGattCallback的回調函數中返回。例如 discoverServices與onServicesDiscovered回調,readCharacteristic與 onCharacteristicRead回調,setCharacteristicNotification與 onCharacteristicChanged回調等。

⑺ Android 手機可以通過 BLE 被掃描到嗎

5.0以後可以了。之前不可以的。只能當主機。
Android在4.2的時候可以使用一些第三方的SDK嘗試著使用Ble當主機。
Android在4.3以後官方可以當主機的角色,也就是樓上說的central,不能作為peripheral。
剛剛發布的5.0已經完美解決了這個問題。主從機都可以了。
開啟藍牙 並且開啟藍牙發現功能 原則上是可以的。

⑻ Android ble 接收數據

由於最近學校組織了一個移動APP(安卓)設計大賽,自己也學習安卓有一段時間了,就跟同學商量一起去參加試試,一拍即合,然後我們就開始想idea,因為最近可穿戴設備比較火,我們也就想試試。經過商量,我負責Android上位機的開發,同學負責下位機的開發。

上位機的開發主要是低功耗藍牙BLE的開發,然後就開始找資料,各種找,最後谷歌官方提供的demo還有其他網友基於官方demo修改的demo,結合網上的博客對demo進行理解。剛開始是覺得看起來有點費勁,各種廣播,跳來跳去的,剛開始就暈菜了。但是經過三四天的理解,算是把官方的demo理解了。

代碼基本上都是官方的demo,只是通過修改獲得自己想要的結果,下面就簡單介紹一下自己的理解。

一、掃描BLE設備activity

檢查該設備是否支持BLE設備,谷歌在Android4.3才開始支持BLE設備(暈死,很長一段時間都沒有一台4.3的設備,看著程序修改了也不能測試!)。

詳細

⑼ android ble 藍牙 誰是主機

GenericAttributeProfile(GATT)通過BLE連接,讀寫屬性類小數據的Profile通用規范。現在所有的BLE應用Profile都是基於GATT的。AttributeProtocol(ATT)GATT是基於ATTProtocol的。ATT針對BLE設備做了專門的優化,具體就是在傳輸過程中使用盡量少的數據。每個屬性都有一個唯一的UUID,屬性將以characteristicsandservices的形式傳輸。CharacteristicCharacteristic可以理解為一個數據類型,它包括一個value和0至多個對次value的描述(Descriptor)。Descriptor對Characteristic的描述,例如范圍、計量單位等。ServiceCharacteristic的集合。例如一個service叫做「HeartRateMonitor」,它可能包含多個Characteristics,其中可能包含一個叫做「heartratemeasurement"的Characteristic。二、角色和職責:Android設備與BLE設備交互有兩組角色:中心設備和外圍設備(Centralvs.peripheral);GATTservervs.GATTclient.Centralvs.peripheral:中心設備和外圍設備的概念針對的是BLE連接本身。Central角色負責scanadvertisement。而peripheral角色負責makeadvertisement。GATTservervs.GATTclient:這兩種角色取決於BLE連接成功後,兩個設備間通信的方式。舉例說明:現有一個活動追蹤的BLE設備和一個支持BLE的Android設備。Android設備支持Central角色,而BLE設備支持peripheral角色。創建一個BLE連接需要這兩個角色都存在,都僅支持Central角色或者都僅支持peripheral角色則無法建立連接。當連接建立後,它們之間就需要傳輸GATT數據。誰做server,誰做client,則取決於具體數據傳輸的情況。例如,如果活動追蹤的BLE設備需要向Android設備傳輸sensor數據,則活動追蹤器自然成為了server端;而如果活動追蹤器需要從Android設備獲取更新信息,則Android設備作為server端可能更合適。三、許可權及feature:和經典藍牙一樣,應用使用藍牙,需要聲明BLUETOOTH許可權,如果需要掃描設備或者操作藍牙設置,則還需要BLUETOOTH_ADMIN許可權:除了藍牙許可權外,如果需要BLEfeature則還需要聲明uses-feature:按時required為true時,則應用只能在支持BLE的Android設備上安裝運行;required為false時,Android設備均可正常安裝運行,需要在代碼運行時判斷設備是否支持BLEfeature://.Then//youcanselectivelydisableBLE-relatedfeatures.if(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)){Toast.makeText(this,R.string.ble_not_supported,Toast.LENGTH_SHORT).show();finish();}四、啟動藍牙:在使用藍牙BLE之前,需要確認Android設備是否支持BLEfeature(required為false時),另外要需要確認藍牙是否打開。如果發現不支持BLE,則不能使用BLE相關的功能。如果支持BLE,但是藍牙沒打開,則需要打開藍牙。打開藍牙的步驟:1、獲取是Android系統中所有藍牙操作都需要的,它對應本地Android設備的藍牙模塊,在整個系統中BluetoothAdapter是單例的。當你獲取到它的示例之後,就能進行相關的藍牙操作了。獲取BluetoothAdapter代碼示例如下://InitializesBluetoothadapter.=(BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);mBluetoothAdapter=bluetoothManager.getAdapter();註:這里通過getSystemService獲取BluetoothManager,再通過BluetoothManager獲取BluetoothAdapter。BluetoothManager在Android4.3以上支持(APIlevel18)。2、判斷是否支持藍牙,並打開藍牙獲取到BluetoothAdapter之後,還需要判斷是否支持藍牙,以及藍牙是否打開。如果沒打開,需要讓用戶打開藍牙:;//.Ifnot,//.if(mBluetoothAdapter==null||!mBluetoothAdapter.isEnabled()){IntentenableBtIntent=newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableBtIntent,REQUEST_ENABLE_BT);}五、搜索BLE設備:通過調用BluetoothAdapter的startLeScan()搜索BLE設備。調用此方法時需要傳入BluetoothAdapter.LeScanCallback參數。因此你需要實現BluetoothAdapter.LeScanCallback介面,BLE設備的搜索結果將通過這個callback返回。由於搜索需要盡量減少功耗,因此在實際使用時需要注意:1、當找到對應的設備後,立即停止掃描;2、不要循環搜索設備,為每次搜索設置適合的時間限制。避免設備不在可用范圍的時候持續不停掃描,消耗電量。搜索的示例代碼如下:/***.*/{;privatebooleanmScanning;privateHandlermHandler;//Stopsscanningafter10seconds.privatestaticfinallongSCAN_PERIOD=10000;privatevoidscanLeDevice(finalbooleanenable){if(enable){//Stopsscanningafterapre-definedscanperiod.mHandler.postDelayed(newRunnable(){@Overridepublicvoidrun(){mScanning=false;mBluetoothAdapter.stopLeScan(mLeScanCallback);}},SCAN_PERIOD);mScanning=true;mBluetoothAdapter.startLeScan(mLeScanCallback);}else{mScanning=false;mBluetoothAdapter.stopLeScan(mLeScanCallback);}}}如果你只需要搜索指定UUID的外設,你可以調用startLeScan(UUID[],BluetoothAdapter.LeScanCallback)方法。其中UUID數組指定你的應用程序所支持的GATTServices的UUID。BluetoothAdapter.LeScanCallback的實現示例如下:;//Devicescancallback.privateBluetoothAdapter.LeScanCallbackmLeScanCallback=newBluetoothAdapter.LeScanCallback(){@OverridepublicvoidonLeScan(finalBluetoothDevicedevice,intrssi,byte[]scanRecord){runOnUiThread(newRunnable(){@Overridepublicvoidrun(){mLeDeviceListAdapter.addDevice(device);mLeDeviceListAdapter.notifyDataSetChanged();}});}};注意:搜索時,你只能搜索傳統藍牙設備或者BLE設備,兩者完全獨立,不可同時被搜索。六、連接GATTServer:兩個設備通過BLE通信,首先需要建立GATT連接。這里我們講的是Android設備作為client端,連接GATTServer。連接GATTServer,你需要調用BluetoothDevice的connectGatt()方法。此函數帶三個參數:Context、autoConnect(boolean)和BluetoothGattCallback對象。調用示例:mBluetoothGatt=device.connectGatt(this,false,mGattCallback);函數成功,返回BluetoothGatt對象,它是GATTprofile的封裝。通過這個對象,我們就能進行GATTClient端的相關操作。BluetoothGattCallback用於傳遞一些連接狀態及結果。BluetoothGatt常規用到的幾個操作示例:connect():連接遠程設備。discoverServices():搜索連接設備所支持的service。disconnect():斷開與遠程設備的GATT連接。close():關閉GATTClient端。readCharacteristic(characteristic):讀取指定的characteristic。setCharacteristicNotification(characteristic,enabled):設置當指定characteristic值變化時,發出通知。getServices():獲取遠程設備所支持的services。等等。註:1、某些函數調用之間存在先後關系。例如首先需要connect上才能discoverServices。2、一些函數調用是非同步的,需要得到的值不會立即返回,而會在BluetoothGattCallback的回調函數中返回。例如discoverServices與onServicesDiscovered回調,readCharacteristic與onCharacteristicRead回調,setCharacteristicNotification與onCharacteristicChanged回調等。

⑽ android ble 和ios ble的區別

iBeacon
在ios 中ibeacon是基於地理位置的微定位技術,雖然藉助手機藍牙進行接收Majro、Minor,但是在開發工程中沒有任何關系。
ios 在ble、ibeacon 開發過程中與Android 的區別
在ios 中所有的數據都是通過API獲取的,也就是說在IOS中不會看到藍牙模塊的裸數據,只能拿到蘋果公司提供的極個別的API中的數據。
ble、ibeacon各使用各自的API,之間沒有任何對應關系。如果想使用ble就不可能獲取到ibeacon的major、minor、uuid 等信息,如果使用ibeacon,沒有辦法發起鏈接請求獲取服務。
在ios中ibeacon通信數據只有六個屬性,就是蘋果提供的幾個表示距離的屬性,是一個float類型數據。

閱讀全文

與androidble什麼相關的資料

熱點內容
台灣補習老師女學生電影 瀏覽:641
蘋果手機主屏幕移除app怎麼移 瀏覽:492
壓縮機冷啟動 瀏覽:791
沐風之女電影在線 瀏覽:187
matlab畫圓的命令 瀏覽:411
香港經典電影3級鬼片上身 瀏覽:470
4k超清藍光在線看電視劇 瀏覽:645
打野電影叫什麼名字 瀏覽:236
原神應急食品app不能用了怎麼辦 瀏覽:470
前沿演算法 瀏覽:667
u2 wcmov 瀏覽:794
帶搜索功能的電影網站 瀏覽:309
狂怒完整版135分鍾 瀏覽:956
叫的小姐竟然是嫂子 瀏覽:178
法國啄木鳥網址名稱 瀏覽:655
日本影院的網站 瀏覽:956
接觸網pdf 瀏覽:15
洗頭發解壓長視頻 瀏覽:705
女性抗日動作電影 瀏覽:455
食物鏈女主角的其他電影 瀏覽:239