最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android獲取藍牙設備列表的方法

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

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

android如何獲取藍牙設備了?

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

BluetoothAdapter

android提供的藍牙適配器,既然有了適配器,接下來我們獲取藍牙列表就有了一個切口。首先我們獲取藍牙列表之前,先需要獲取藍牙相關的權限,我們在AndroidManifest.xml里加入權限以下權限:

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

接下來我們在檢查設備是否有藍牙功能

bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
   //通知用戶當前設備不具有藍牙功能
            return;
        }

如果bluetoothAdapter != null, 我們再來檢查用戶是否開啟了藍牙功能

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

通過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";

不難看出這些應該是適配器給我們配置的廣播標簽,那我們就根據這些狀態(tài)值來創(chuàng)建一個

BroadcastReceiver.class用來接收藍牙適配器給我們發(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:
                //收集藍牙信息
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                String mac = (device.getAddress().replace(":", ""));
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.append("設備名稱:" + device.getName() + "\n");
                stringBuilder.append("mac地址:" + toLowerCase(mac, 0, mac.length()) + "\n");
                //用一個新的string集合去對比設備名稱和mac地址,不能拼接rssi和uuid后再去對比
                if (stringList.indexOf(stringBuilder.toString()) == -1) {
                    // 防止重復添加
                    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()); // 獲取設備名稱和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()));
    }
}

接下來在activity中去注冊我們的廣播(記得在ondestroy中注銷廣播?。?/p>

// 注冊Receiver來獲取藍牙設備相關的結果
 broadcastReceiver = new BlueToothBroadcast(blueToothList,blueToothListAdapterr);
 IntentFilter intent = new IntentFilter();
        intent.addAction(BluetoothDevice.ACTION_FOUND); // 用BroadcastReceiver來取得搜索結果
        intent.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
        intent.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        registerReceiver(broadcastReceiver, intent);

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

這套下來我們的藍牙設備列表就獲取完成了!快去試試

if (!bluetoothAdapter.isDiscovering()) {
            blueToothList.clear();
            addPairedDevice();//添加藍牙配對設備
            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());
            }
        }
    }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論

唐山市| 锡林郭勒盟| 左贡县| 鲁山县| 邵武市| 开阳县| 东平县| 叙永县| 涞水县| 陈巴尔虎旗| 三穗县| 湘潭市| 开封县| 新宁县| 余庆县| 南岸区| 甘谷县| 明星| 通江县| 永定县| 白城市| 安吉县| 雷州市| 宿松县| 肇庆市| 曲水县| 淅川县| 建湖县| 莎车县| 高邮市| 曲周县| 汤阴县| 新营市| 广安市| 霸州市| 玉门市| 句容市| 南华县| 房产| 东平县| 潮州市|