Android BLE藍牙開發(fā)一

具體概念不寫了,很多,結(jié)尾貼出一些博客來看

1、首先來一張圖,對比下傳統(tǒng)藍牙和BLE設(shè)備的特點和主要應(yīng)用業(yè)務(wù)場景。


image.png

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è)備進行通訊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容