其他分享
首页 > 其他分享> > IBEACON的搜索与数据的保存

IBEACON的搜索与数据的保存

作者:互联网

写在前面

参考(https://www.jianshu.com/p/0b356e7e38bf)这篇文章对Android BLE 框架中如何进行蓝牙设备的检测有了一个很全面的解释。并且我们也能够从中得到例程(https://github.com/a1anwang/okble)。本文只是简单的针对例程的内容进行一定的更改,使其能够将检测到的ibeacon的有关信息进行选择性存储,比如我们已经准备好了四个已经提前对其进行了命名(bao,jiao,shi,RDL52832)的ibeacon的RSSI的值。

对本例程的一些解释

因为我们的目的是解析ibeacon,所以我们先来看一下他的scanibeacon功能,并在其基础上进行更改。在这里插入图片描述
我们看到ScanBeaconActivity是对BaseActivity的扩展,所以我们需要先了解一下BaseActivity的内容,在此列出需要注意的事项:
必须要有的几个函数:setContentLayout(这是设置布局的函数)beforeInitView(这是在初始化布局之前的函数,所以应注意此中不要加入如getScreenWidth之类的提取布局信息的函数会造成崩溃),initView(就是初始化布局函数,从中可以设置标题之类的,从这里开始就可以提取布局信息了)afterInitView(),onClickEvent(View v)。

读取并存储所需的ibeacon信息

我们先定义四个变量用来存储RSSI的值,并创建几个函数用来存储和读取变量的值会方便一些。

    private int bao = 100;
    public int getbao() {
        return bao;
    };
    public void setbao(int bao) {
        this.bao = bao;
    }
    private int shi = 100;
    public int getshi() {
        return shi;
    };
    public void setshi(int shi) {
        this.shi = shi;
    }
    private int jiao = 100;
    public int getjiao() {
        return jiao;
    };
    public void setjiao(int jiao) {
        this.jiao = jiao;
    }
    private int rdl = 100;
    public int getrdl() {
        return rdl;
    };
    public void setrdl(int rdl) {
        this.rdl = rdl;
    }

然后就是读取蓝牙模块反馈给我们的信息了,我们可以发现有一个scancallback的函数代表搜索到蓝牙的反馈,我们需要对其内部进行修改。

    OKBLEBeaconManager.OKBLEBeaconScanCallback scanCallBack=new OKBLEBeaconManager.OKBLEBeaconScanCallback() {
        @Override
        public void onScanBeacon(OKBLEBeacon beacon) {
            scanedResults.put(beacon.getIdentifier(),beacon);
            adapter.notifyDataSetChanged();
        }
    };

注意到这里出现了一个beacon的变量其中beacon.getIdentifier()是获得beacon的ID资源,所以我们也可以使用beacon.getUuid来获取他的RSSI的值

    OKBLEBeaconManager.OKBLEBeaconScanCallback scanCallBack=new OKBLEBeaconManager.OKBLEBeaconScanCallback() {
        @Override
        public void onScanBeacon(OKBLEBeacon beacon) {
            scanedResults.put(beacon.getIdentifier(), beacon);
            switch(beacon.getName())
            {
                case "bao":
                    setbao(beacon.getRssi());
                    break;
                case "shi":
                    setshi(beacon.getRssi());
                    break;
                case "jiao":
                    setjiao(beacon.getRssi());
                    break;
                case "RDL52832":
                    setrdl(beacon.getRssi());
                    break;
                default:
                    setbao(0);
            }
        }
    };

这样就把搜索到的ibeacon进行判断并把符合我们要求的结果储存到相应的变量中了。

写在最后

这是我们小组的第三个博客,写的不好请见谅。我们也是一边学习一边在做并且说实话上面的东西我还是没有弄明白,就当给大家一个参考,希望能对大家有帮助。如果有问题请指出让我知道,我会及时更改或者干脆不改了直接删除(笑)。

标签:jiao,int,IBEACON,保存,beacon,搜索,bao,shi,public
来源: https://blog.csdn.net/Fisher__/article/details/96744791