具體概念不寫了,很多,結(jié)尾貼出一些博客來看
1、首先來一張圖,對比下傳統(tǒng)藍牙和BLE設(shè)備的特點和主要應(yīng)用業(yè)務(wù)場景。

2、開發(fā)相關(guān)應(yīng)用需要配置相關(guān)的權(quán)限
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
- 這里需要注意的是,按照上面的配置,在6.0以下是沒有問題的,但是在android6.0需要加配一個權(quán)限,否則掃描不到藍牙設(shè)備。
//6.0藍牙需要這個權(quán)限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
然后在代碼中去申請運行時權(quán)限。
3、代碼中使用藍牙之前需要做的:首先判斷設(shè)備是否支持ble功能,如果支持,在進行6.0運行時權(quán)限的申請,申請成功之后判斷是否藍牙開啟,未開啟進行開啟,開啟則有兩種方法,具體看代碼說明,之后就可以進行藍牙的相關(guān)操作了。
if(BleUtil.isSupportBle(this))//設(shè)備支持ble功能
requestRuntimePermission(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION});
else
Toast.makeText(this,"該設(shè)備沒有ble相關(guān)藍牙功能",Toast.LENGTH_SHORT).show();
requestRuntimePermission(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION});是申請運行時權(quán)限的方法,在授權(quán)的回調(diào)方法中繼續(xù)進行關(guān)于藍牙的操作initBluetooth()
/**
* 獲取藍牙設(shè)備的適配器
* 判斷是否開啟藍牙:
* 1、如果開啟,則利用藍牙適配器直接掃描;
* 2、如果沒有開啟,則進行開啟(注釋掉的代碼為方法②):
* ①直接調(diào)用函數(shù)enable()去打開藍牙設(shè)備
* ②系統(tǒng)API去打開藍牙設(shè)備,該方式會彈出一個對話框樣式的Activity供用戶選擇是否打開藍牙設(shè)備。注意:如果藍牙已經(jīng)開啟,不會彈出該Activity界面。
*/
private void initBluetooth() {
BluetoothManager mBluetoothManager = (BluetoothManager) this.getSystemService(Context.BLUETOOTH_SERVICE);
if (mBluetoothManager != null) {
mBluetoothAdapter = mBluetoothManager.getAdapter();
if (mBluetoothAdapter != null) {
if (!mBluetoothAdapter.isEnabled()) {//設(shè)備未開啟藍牙,打開藍牙
mBluetoothAdapter.enable();
// startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE),0x01);//打開藍牙系統(tǒng)提示窗口
}
startLeScan();//開始掃描
}
}
}
// @Override
// protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// super.onActivityResult(requestCode, resultCode, data);
// if(requestCode==0x01&&resultCode==RESULT_OK){
// startLeScan();
// }else{
// Toast.makeText(this,"如果稍后想使用設(shè)備,請打開藍牙功能",Toast.LENGTH_SHORT).show();
// }
// }
- 至此,我們將所有的關(guān)于藍牙前期的設(shè)備支持情況和藍牙以及其他相關(guān)權(quán)限都做了處理,下面就可以正式進入藍牙操作了。
附上之前BleUtil的代碼:
public class BleUtil {
//是否支持藍牙模塊
@TargetApi(18)
public static boolean isSupportBle(Context context){
return context!=null&&context.getPackageManager().hasSystemFeature("android.hardware.bluetooth_le");
}
//是否開啟藍牙
@TargetApi(18)
public static boolean isBleOpened(Context context){
if(isSupportBle(context)){
BluetoothManager manager = getBlueManager(context);
return manager.getAdapter().isEnabled();
}
return false;
}
//獲取藍牙模塊管理
@TargetApi(18)
public static BluetoothManager getBlueManager(Context context){
return (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
}
//獲取藍牙模塊適配器
@TargetApi(18)
public static BluetoothAdapter getBlueAdapter(Context context){
return getBlueManager(context).getAdapter();
}
}
推薦博文:
Android BLE最完整的工具類(掃描/連接/讀寫/通知設(shè)備),可以手機與設(shè)備進行通訊