欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android獲取藍(lán)牙設(shè)備列表的方法

 更新時(shí)間:2021年10月19日 17:17:10   作者:習(xí)作  
這篇文章主要為大家詳細(xì)介紹了Android獲取藍(lán)牙設(shè)備列表的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近換了一家公司,主要內(nèi)容是做關(guān)于移動(dòng)端室內(nèi)定位的相關(guān)sdk,剛進(jìn)來(lái)的時(shí)候信心滿滿,誓要干出一番天地?。?!結(jié)果進(jìn)來(lái)快一個(gè)多月了,根本沒(méi)輪到我施展拳腳,給我擱置在一旁自己弄自己的。行吧,既然是做室內(nèi)定位的話那無(wú)非就是(gps,藍(lán)牙,wifi等)這些技術(shù)來(lái)實(shí)現(xiàn)嘛,然后我們就可以有本篇的切入點(diǎn)了:

android如何獲取藍(lán)牙設(shè)備了?

我們一步一步來(lái)分析,首先藍(lán)牙屬于一種短距離的無(wú)線通信技術(shù),那作為我們android系統(tǒng)是否對(duì)此有過(guò)封裝了?答案那肯定是有了!

BluetoothAdapter

android提供的藍(lán)牙適配器,既然有了適配器,接下來(lái)我們獲取藍(lán)牙列表就有了一個(gè)切口。首先我們獲取藍(lán)牙列表之前,先需要獲取藍(lán)牙相關(guān)的權(quán)限,我們?cè)贏ndroidManifest.xml里加入權(quán)限以下權(quán)限:

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

接下來(lái)我們?cè)跈z查設(shè)備是否有藍(lán)牙功能

bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
   //通知用戶當(dāng)前設(shè)備不具有藍(lán)牙功能
            return;
        }

如果bluetoothAdapter != null, 我們?cè)賮?lái)檢查用戶是否開(kāi)啟了藍(lán)牙功能

if (!bluetoothAdapter.isEnabled()){ //檢查是否開(kāi)啟藍(lán)牙功能
     Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
     startActivity(intent); //跳轉(zhuǎn)到系統(tǒng)Activity,讓用戶選擇開(kāi)啟藍(lán)牙功能
     bluetoothAdapter.enable();
     return;
}

通過(guò)BluetoothAdapter源碼我們可以看到該類下面定義了很多常量值

public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED";
    public static final String ACTION_DISCOVERY_FINISHED = "android.bluetooth.adapter.action.DISCOVERY_FINISHED";
    public static final String ACTION_DISCOVERY_STARTED = "android.bluetooth.adapter.action.DISCOVERY_STARTED";
    public static final String ACTION_LOCAL_NAME_CHANGED = "android.bluetooth.adapter.action.LOCAL_NAME_CHANGED";
    public static final String ACTION_REQUEST_DISCOVERABLE = "android.bluetooth.adapter.action.REQUEST_DISCOVERABLE";
    public static final String ACTION_REQUEST_ENABLE = "android.bluetooth.adapter.action.REQUEST_ENABLE";
    public static final String ACTION_SCAN_MODE_CHANGED = "android.bluetooth.adapter.action.SCAN_MODE_CHANGED";

不難看出這些應(yīng)該是適配器給我們配置的廣播標(biāo)簽,那我們就根據(jù)這些狀態(tài)值來(lái)創(chuàng)建一個(gè)

BroadcastReceiver.class用來(lái)接收藍(lán)牙適配器給我們發(fā)送的消息

public class BlueToothBroadcast extends BroadcastReceiver {
 
    private List<String> blueToothList;
    private BlueToothListAdapter blueToothListAdapter;
    private List<String> stringList = new ArrayList<>;
 
    public BlueToothBroadcast(List<String> blueToothList,
BlueToothListAdapter blueToothListAdapter) {
        this.blueToothList = blueToothList;
        this.blueToothListAdapter= blueToothListAdapter;
    }
 
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
         switch (action){
            case BluetoothDevice.ACTION_FOUND:
                //收集藍(lán)牙信息
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                String mac = (device.getAddress().replace(":", ""));
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.append("設(shè)備名稱:" + device.getName() + "\n");
                stringBuilder.append("mac地址:" + toLowerCase(mac, 0, mac.length()) + "\n");
                //用一個(gè)新的string集合去對(duì)比設(shè)備名稱和mac地址,不能拼接rssi和uuid后再去對(duì)比
                if (stringList.indexOf(stringBuilder.toString()) == -1) {
                    // 防止重復(fù)添加
                    stringList.add(stringBuilder.toString());
                    if (device.getName() != null) {
                        stringBuilder.append("rssi:" + intent.getExtras().getShort(BluetoothDevice.EXTRA_RSSI) + "\n");
                        stringBuilder.append("Uuid:" + device.getUuids());
                        blueToothList.add(stringBuilder.toString()); // 獲取設(shè)備名稱和mac地址
                    }
                }
                Log.d("searchDevices", "onReceive str: " + blueToothList.toString());
                break;
            case BluetoothAdapter.ACTION_DISCOVERY_STARTED:
                //正在掃描
                break;
            case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:
                blueToothListAdapter.notifyDataSetChanged();
                Toast.makeText(context, "掃描完成", Toast.LENGTH_SHORT).show();
                break;
        }
    }
 
 
    //格式化mac地址
    public static String toLowerCase(String str, int beginIndex, int endIndex) {
        return str.replaceFirst(str.substring(beginIndex, endIndex),
                str.substring(beginIndex, endIndex)
                        .toLowerCase(Locale.getDefault()));
    }
}

接下來(lái)在activity中去注冊(cè)我們的廣播(記得在ondestroy中注銷廣播啊)

// 注冊(cè)Receiver來(lái)獲取藍(lán)牙設(shè)備相關(guān)的結(jié)果
 broadcastReceiver = new BlueToothBroadcast(blueToothList,blueToothListAdapterr);
 IntentFilter intent = new IntentFilter();
        intent.addAction(BluetoothDevice.ACTION_FOUND); // 用BroadcastReceiver來(lái)取得搜索結(jié)果
        intent.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
        intent.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        registerReceiver(broadcastReceiver, intent);

最后一步,開(kāi)啟藍(lán)牙發(fā)送廣播,然后在自己寫的適配器上把收集到的list加載上去,完事兒!

這套下來(lái)我們的藍(lán)牙設(shè)備列表就獲取完成了!快去試試

if (!bluetoothAdapter.isDiscovering()) {
            blueToothList.clear();
            addPairedDevice();//添加藍(lán)牙配對(duì)設(shè)備
            bluetoothAdapter.startDiscovery();
 }
 
  private void addPairedDevice() {
        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
        if (pairedDevices != null && pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
                String mac = (device.getAddress().replace(":", ""));
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.append(getString(R.string.device_name)).append(device.getName()).append("\n");
                stringBuilder.append(getString(R.string.mac_ip)).append(toLowerCase(mac, 0, mac.length())).append("\n");
                stringBuilder.append(getString(R.string.uuid)).append(Arrays.toString(device.getUuids()));
                blueToothList.add(stringBuilder.toString());
            }
        }
    }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何利用Android Studio將moudle變成jar示例詳解

    如何利用Android Studio將moudle變成jar示例詳解

    這篇文章主要給大家介紹了關(guān)于如何利用Android Studio將moudle變成jar的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • RxJava取消訂閱的各種方式的實(shí)現(xiàn)

    RxJava取消訂閱的各種方式的實(shí)現(xiàn)

    這篇文章主要介紹了RxJava取消訂閱的各種方式的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Android實(shí)現(xiàn)布局全屏

    Android實(shí)現(xiàn)布局全屏

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)布局全屏,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 圖文講解Android的ImageView類中的ScaleType屬性設(shè)置

    圖文講解Android的ImageView類中的ScaleType屬性設(shè)置

    這篇文章主要介紹了Android的ImageView類中的ScaleType屬性設(shè)置,同時(shí)文中還講了實(shí)現(xiàn)圖片寬度100%ImageView寬度且高度按比例自動(dòng)伸縮的方法,需要的朋友可以參考下
    2016-03-03
  • Android Studio 4.0 正式發(fā)布在Ubuntu 20.04中安裝的方法

    Android Studio 4.0 正式發(fā)布在Ubuntu 20.04中安裝的方法

    這篇文章主要介紹了Android Studio 4.0 正式發(fā)布如何在Ubuntu 20.04中安裝,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • android開(kāi)發(fā)中使用java觀察者模式

    android開(kāi)發(fā)中使用java觀察者模式

    遇到android程序中后入棧的一個(gè)Activity需要更新之前一個(gè)或者兩個(gè)以上Activity中的數(shù)據(jù)時(shí)使用,或者需要在adapter中修改Activity或者fragment的數(shù)據(jù)和ui等
    2014-02-02
  • Android編程ViewPager回彈效果實(shí)例分析

    Android編程ViewPager回彈效果實(shí)例分析

    這篇文章主要介紹了Android編程ViewPager回彈效果,以實(shí)例形式較為詳細(xì)的分析了ViewPager回彈效果的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Android二維碼開(kāi)發(fā)學(xué)習(xí)教程

    Android二維碼開(kāi)發(fā)學(xué)習(xí)教程

    這篇文章主要為大家分享了Android二維碼開(kāi)發(fā)學(xué)習(xí)教程,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Android7.0自動(dòng)更新適配 包解析異常

    Android7.0自動(dòng)更新適配 包解析異常

    這篇文章主要為大家詳細(xì)介紹了Android7.0自動(dòng)更新適配,包解析異常的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 深入淺析Android接口回調(diào)機(jī)制

    深入淺析Android接口回調(diào)機(jī)制

    在Android中到處可見(jiàn)接口回調(diào)機(jī)制,尤其是UI事件處理方面,本文給大家介紹android接口回調(diào)機(jī)制,涉及到android接口回調(diào)相關(guān)知識(shí),對(duì)本文感興趣的朋友可以參考下本篇文章
    2015-11-11

最新評(píng)論