1. 程式人生 > >Android Studio 藍芽開發流程

Android Studio 藍芽開發流程

1. 許可權

關於藍芽的許可權主要涉及到下面三個:

BLUETOOTH:允許配對的裝置進行連線

BLUETOOTH_ADMIN:允許搜尋和配對裝置

ACCESS_COARSE_LOCATION:廣播接收器接收BluetoothDevice.ACTION_FOUND廣播需要改許可權

<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

在後面還會提到在Android6.0及以上的版本中關於ACCESS_COARSE_LOCATION許可權的申請。

2. 開啟藍芽

建立藍芽通訊之前需要驗證是否有藍芽裝置,以及藍芽裝置是否已經開啟。對於一個Android系統而言只有一個藍芽介面卡,通過getDefaultAdapter()方法可以返回其一個例項,如果返回為null,則說明該裝置不支援藍芽。

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

if (mBluetoothAdapter == null) {

        // device doesn't support Bluetooth

}

接下來是檢查藍芽裝置是否已經開啟,如果沒有開啟,可以呼叫startActivityForResult()方法來彈出對話方塊讓使用者選擇開啟,這種方式不會停止當前的應用。

if (!mBluetoothAdapter.isEnabled()) {

        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

}

3. 搜尋裝置

搜尋裝置可以分成兩部分,一是查詢已經與本機配對的裝置,通過

getBondedDevices()方法返回已經配對的裝置資訊:

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();

if (pariedDevices.size > 0) {

        for (BluetoothDevice device: pairedDevices) {

                String deviceName = device.getName();

                String deviceMACAddress = device.getAddress();

        }

}

二是搜尋周圍可用的但是還未配對的裝置。

系統在發現藍芽裝置會通過廣播的形式通知app,所以在搜尋裝置之前需要註冊廣播接收器來接收發現藍芽裝置的訊息,在銷燬Activity時登出廣播接收器。

private BroadcastReceiver mReceiver = new BroadcastReceiver() {

        public void onReceiver(Context context, Intent intent) {

                String action = intent.getAction();

                if (BluetoothDevice.ACTION_FOUND.equals(action)) {

                        BluetoothDevie device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                }

        }

}

@Override

protected void onCreate(Bundle savedInstanceState) {

    // Register for broadcasts when a device is discovered.

    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

    registerReceiver(mReceiver, filter);

}

@Override

protected void onDestroy() {

    super.onDestroy();

    // Don't forget to unregister the ACTION_FOUND receiver.

    unregisterReceiver(mReceiver);

}

BluetoothDevice.ACTION_FOUND廣播需要ACCESS_COARSE_LOCATION許可權,該許可權是個危險許可權,在Android 6.0及以上,除了在manifest中宣告還需要在java程式碼中申請。獲取了該許可權之後,在搜尋藍芽裝置時才能收到系統發出的藍芽裝置發現的廣播。搜尋裝置呼叫startDiscovery()方法,當週圍有可用裝置時,系統會通過廣播的形式通知應用。

//檢查ACCESS_COARSE_LOCATION許可權

                if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION)

                        == PackageManager.PERMISSION_GRANTED){

                    Toast.makeText(MainActivity.this,"搜尋回撥許可權已開啟",Toast.LENGTH_SHORT).show();

                    if(mBluetoothAdapter.isDiscovering()){

                        mBluetoothAdapter.cancelDiscovery();

                    }

                    mBluetoothAdapter.startDiscovery();

                }else{

                    Toast.makeText(MainActivity.this,"搜尋回撥許可權未開啟",Toast.LENGTH_SHORT).show();

                    ActivityCompat.requestPermissions(MainActivity.this,

                            new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},REQUEST_ACCESS_COARSE_LOCATION);

                }

@Override

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if(requestCode==REQUEST_ACCESS_COARSE_LOCATION){

            if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){

                mBluetoothAdapter.startDiscovery();

                if(mBluetoothAdapter.isDiscovering()){

                    mBluetoothAdapter.cancelDiscovery();

                }

                mBluetoothAdapter.startDiscovery();

            } else {

                Toast.makeText(MainActivity.this,"action found is not granted.",Toast.LENGTH_LONG).show();

            }

        }

    }

4.6.3 建立連線傳送資料

做的這個應用主要是與HC-06模組進行藍芽通訊,HC-06是一個串列埠透傳模組,其對應的UUID是“00001101-0000-1000-8000-00805F9B34FB”。手機端是作為客戶端與HC-06藍芽模組進行連線的。在藍芽socket進行connect之前,一定要呼叫BluetoothAdaptercancelDiscovery()方法。連線的第一步是通過呼叫BluetoothDevicecreateRfcommSocketToServiceRecord(UUID)獲取BluetoothSocket.第二步是呼叫BluetoothSocketconnect()方法發起連線。由於connect()為阻塞呼叫,因此該連線過程應該在主執行緒之外的執行緒中執行。

在呼叫connect()時,應始終確保裝置未在執行裝置發現。如果正在進行發現操作,則會大幅降低連線嘗試的速度,並增加連線失敗的可能性。

示例:

String macAddr = "20:15:05:25:02:43";

BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(macAddr);

UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");

try {

    mSocket = device.createRfcommSocketToServiceRecord(uuid);

} catch (IOException e) {

    e.printStackTrace();

}

new Thread(){

    @Override

    public void run() {

        mBluetoothAdapter.cancelDiscovery();

        try {

            mSocket.connect();

        } catch (IOException e) {

            try {

                mSocket.close();

            } catch (IOException e1) {

                e1.printStackTrace();

            }

            e.printStackTrace();

        }

        super.run();

    }

}.start();

確保在建立連線之前始終呼叫cancelDiscovery(),而且呼叫時無需實際檢查其是否正在執行,如果確實想要執行檢查,請呼叫isDiscovering()

相關推薦

Android Studio 開發流程

1. 許可權關於藍芽的許可權主要涉及到下面三個:BLUETOOTH:允許配對的裝置進行連線BLUETOOTH_ADMIN:允許搜尋和配對裝置ACCESS_COARSE_LOCATION:廣播接收器接收BluetoothDevice.ACTION_FOUND廣播需要改許可權&l

android ble開發總結(附帶自己專案中提取整理的demo地址)

一些基本的知識我就不寫了,很多其他部落格都可以查到。我主要寫幾點我在其他部落格沒有看到的東西以及我在實際開發中遇到的問題。最後我會貼上程式碼的地址。 1.需要設定2個或3個uuid。通常連線裝置後會得

android ble開發略解

Android 藍芽4.0開發 1、  許可權和相關屬性 “android:required="true"表示apk只有在具有bluetooth_le屬性的系統裡執行,這個4.3之前android系統沒有 <uses-featureandroid:name="and

android ble開發

1.獲得藍芽介面卡 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { BluetoothManager mBluetooth

android 傳統開發 (附示例原始碼)

前:本文為QiaoJim原創,轉載請附原文連結,謝謝合作! --------------------------------------------------------------------

Android BLE 開發入門

初識低功耗藍芽 Android 4.3(API Level 18)開始引入Bluetooth Low Energy(BLE,低功耗藍芽)的核心功能並提供了相應的 API, 應用程式通過這些 API 掃描藍芽裝置、查詢 services、讀寫裝置的 characteris

android studio 透傳

藍芽透傳 關於藍芽透傳,基本步驟如下: 1、設定藍芽許可權 2、開啟藍芽 3、藍芽搜尋 4、藍芽連線與通訊 測試使用android4.4版本手機與藍芽4.0硬體模組; 1、設定藍芽許可權(android6.0以下) 藍芽許可權在AndroidMa

android 開發基本流程

原文連結  http://blog.csdn.net/q610098308/article/details/45248423  侵刪 此例子基於 android demo 對於一般的軟體開發人員來說,藍芽是很少用到的,尤其是Android的藍芽開發,國內的例子很

Android開發—BLE(低功耗)詳細開發流程

        Android藍芽開發前,首先要區分是經典藍芽開發還是BLE(低功耗)藍芽開發,它們的開發是有區別的,如果還分不清經典藍芽和BLE(低功耗)藍芽的小夥伴,可以先看Android藍芽開發—經典藍芽和BLE(低功耗)藍芽的區別 注意:藍芽4.0只有andro

Android 開發常用UUID表

        // Sample Services.          attributes.put("0000180d-0

Android BLE 快速開發框架。

FastBle 專案地址:Jasonchenlijian/FastBle  簡介:Android BLE 藍芽快速開發框架。 更多:作者   提 Bug    標籤: 藍芽- Thanks to th

Android開發之低功耗(4.0)開發全記錄

主要內容概況 前面我記錄了開發藍芽2.0的過程,今天準備介紹現在的主流藍芽技術,藍芽4.0的開發,該藍芽技術是在Android4.3(API級別18)版本引入的API。 官方文件 具體的區別主要以下幾點: 1.新的藍芽技術提供了連線服務的方法,以前是沒有提供連線藍芽的方法

Android開發之經典2.0)開發全記錄

前言部分 最近因為需要開始藍芽相關開發,所以在網上搜索了很多內容,並且結合自己的開發過程做了一個總結,先儲備上,也許可能幫到正在做藍芽開發的同學。 藍芽很早就是android裝置上基本通訊功能了,只是以前的沒有那麼多藍芽裝置,現在藍芽裝置種類繁多,所以經常會有人遇到藍芽相關的開發

Android BLE4.0開發Android手機與BLE終端通訊

轉載自: https://blog.csdn.net/fu908323236/article/details/76208997 這篇部落格主要講解AndroidBLE藍芽4.0的基本概念,以及基礎用法。  BLE 即 Bluetooth Low Energy,藍芽低功耗技術,是藍芽

1 android開發---與模組進行通訊

原文地址 http://www.cnblogs.com/wenjiang/p/3200138.html 近半個月來一直在搞android藍芽這方面,主要是專案需要與藍芽模組進行通訊。開頭的進展很順利,但因為藍芽模組不在我這裡,所以只能用手機測試。一開頭就發現手機的藍芽

Android 開發 —— BLE

藍芽——BLE 介紹 1.BLE 是 Bluetooth Low Energy 的縮寫,意思為低功耗藍芽。由藍芽技術聯盟(Bluetooth SIG)設計的無線通訊技術,主要用於醫療,健身,安全和家庭娛樂行業。 與傳統藍芽相比,藍芽低功耗旨在大幅降低功耗

Android 開發之搜尋、配對、連線、通訊大全

        藍芽( Bluetooth®):是一種無線技術標準,可實現固定裝置、移動裝置和樓宇個人域網之間的短距離資料交換(使用2.4—2.485GHz的ISM波段的UHF無線電波)。藍芽裝置最多可以同時和7個其它藍芽裝置建立連線,進行通訊,當然並不是每一個藍芽都可以達到

Android開發教程(一)——搜尋裝置

Android藍芽功能的開發一直是很多新手頭疼的問題,網上雖然也有很多教程貼,但大多都寫得不全面,不能讓我們真正掌握藍芽開發的基本知識。本教程主要講解搜尋藍芽裝置、藍芽裝置之間的連線和藍芽之間的通訊三個主要模組。掌握了這三個,基本就能進行簡單的藍芽開發了。

Android 開發(八)hfp接聽、結束通話電話

本文已授權微信公眾號 fanfan程式媛 獨家釋出 掃一掃文章底部的二維碼或在微信搜尋 fanfan程式媛 即可關注 繼續研究hfp相關功能。藍芽耳機可以控制手機接聽、拒接、結束通話電話,撥打電話等功能。本文主要分析下起這些操作的大致流程。 在

Android開發(一)之開啟和裝置搜尋

Android藍芽開發系列目錄: 一、判斷是否系統是否支援藍芽 在使用藍芽之前,我們首先要判斷手機裝置是否支援藍芽,雖然現在基本都支援藍芽了,但是為了程式碼的嚴謹性我們還是需要在程式碼中判斷: private BluetoothManager bluetoothma