Android连续的获取蓝牙的RSSI

简介: Android连续的获取蓝牙的RSSI

基于蓝牙的RSSI可以有很多应用,要获得蓝牙的RSSI无外乎两种方法,一种就是基于扫瞄的方法,优点是Android本身支持,缺点是scan的时间比较长,并且中间过程不受控制,为了连续的测量,需要不断的scan;第二种就是,基于连接的方法,前提是要建立两个蓝牙设备的连接后,再测量RSSI,优点是后期测量比较方便,间隔时间也较短。

连续测量Android设备(Java)的蓝牙RSSI教程

在撰写本文时,即使存在用于获取WiFi RSSI的API,也没有可用于连续检索现有蓝牙连接的RSSI的API。当前API将只在初始连接建立过程中获得蓝牙RSSI。在本文中,我们将了解如何从运行Linux的计算机上连续获取Android设备和诺基亚移动电话的蓝牙RSSI。

连接到计算机的任何设备的RSSI可以通过在Linux中使用HCIOOL来确定。但是,对于商业化的Android设备,这可能是不可能的,因为要使用Android NDK从蓝牙HCI层调用任何函数,需要根访问。出于实验目的,为了开发商用手持设备上的蓝牙设备,我们将通过将这些设备连接到计算机或膝上型计算机来测量这些设备的RSSI。

在这个实验中,RSSI从安卓设备(Nexus 7平板)和诺基亚手机(Xpress Music)上连续地从基于Ubuntu的计算机上进行测量。源代码使用BlueClub蓝牙库从这些连接的设备中提取RSSI信息。Android设备和诺基亚设备就像服务器一样,计算机就像客户机一样。

在计算机上,我们需要编写客户端代码,它将不断地从我们已知的设备中轮询RSSI。为了做到这一点,我们需要首先从这里检查bluecove蓝牙库(http://bluecove.org/source-repository.html)。然后我们可以利用BLUTEOTROSRIPSION CIENT.java来获取RSSI读数。我们可以利用我们已知设备的蓝牙MAC地址过滤掉其他发现的设备。在将设备与计算机连接之后,我们可以从Ubuntu中的蓝牙菜单的偏好选项卡获得设备的蓝牙MAC地址。

客户端:


public void PollRSSI()
{
try { 
while(true)
                 {
          try {
          System.out.println();
          if(Android_Device != null)
          System.out.println("Android RSSI = " + RemoteDeviceHelper.readRSSI(Android_Device));
     } catch (Exception e) { System.out.println("Android RSSI = Connection Error"); }
          try {
          if(Nokia != null)
          System.out.println("Nokia RSSI = " + RemoteDeviceHelper.readRSSI(Nokia));
      } catch (Exception e) { System.out.println("Nokia RSSI = Connection Error"); }   
          Thread.sleep(2000);
                }
     } catch (Exception e){ e.printStackTrace(); }
}

对于Android设备,我们需要编写自己的服务器代码,以克服[13 ]权限拒绝错误。我们可能需要在Android设备上运行多个服务器线程(Access Tox.java),这样一来,传入的连接请求将在初始权限拒绝错误之后最终被接受。我们还将指定客户端可以搜索和连接的RfCOMM UUID和服务名称。整个服务器必须在Android(BrutoToSursService,Java)中实现为服务,这样,如果显示屏幕超时,连接不会丢失。

服务端:


public AcceptThread()
{
                   BluetoothServerSocket tmp = null;
                   mBluetooth = BluetoothAdapter.getDefaultAdapter();
                   mUuid = UUID.fromString("00000003-0000-1000-8000-00805F9B34FB");
        try {
                tmp = mBluetooth.listenUsingInsecureRfcommWithServiceRecord("BluetoothCustomService",      mUuid);          
             } catch (IOException e) { }
                myServerSocket = tmp;
         }
public void onCreate()
{
super.onCreate();
thread1 = new Thread(new AcceptThread());
thread1.start(); //First thread will often be denied
thread2 = new Thread(new AcceptThread());
thread2.start(); //Most probably be accepted
}

对于诺基亚设备,不需要显式的服务器,我们可以简单地使用蓝牙串行端口配置文件连接url进行连接。一旦建立连接,我们就可以周期性地轮询来自两个设备的RSSI。

注意:蓝牙的RSSI可能不是室内定位等应用的有效和可靠的参数。

源代码:

蓝牙

参考文献:

“基于蓝牙的超级市场导航系统”-珍珠马诺哈兰,维格纳什·斯巴拉曼尼亚和阿努沙·武图库里-课程项目-移动系统16:332:559:02F12(罗格斯秋季2012)->

HTTP://ExcRe.ANDROID.COM/GUID/TopICS/CaluleVisty/BuLotoTo.HTML

HTTP://StAccOfFult.COM/DISSMS/1225178/ANDROID-BLUTITOT-RES-RSSI-信号强度

HTTP://BueleCovi.Org/BeLeCoo-Expuls/BraveCooTeSt/Dex.HTML

有TX问到,为什么RSSI=0,解释如下文,简单点就是这个值是设备相关的。

http://www.robomotic.com/android/bluetooth-rssi/

image.png

RSSI是一个8位有符号整数,表示Re-(RX)功率电平在金的内部或上方或下方接收机功率范围(GRPR),被认为是理想的

RX功率范围。图1说明了两者之间的关系。GRPR和RSSI在蓝牙技术中的应用。POS—固定或负RSSI(dB)表示RX功率电平为

GRPR的上方或下方,而零点意味着这是理想的(也就是说,在GRPR内)。上下阈值GRPR的幼体是松散结合的,留下它们是设备。这反过来又影响RSSI,因为它仅仅是一个相关参数。事实上,它的绝对准确性不是人。在特定的情况下,唯一的要求是能够指示它是否在GRPR的内部、上方或下方。这个蓝牙的RSSI状态参数特别适用于用于电力控制目的〔6〕。接收器发送“in -“发送”或“减少”TPL请求到发送端,DE悬而未决的RSSI是否被认为是负面的或阳性。

目录
相关文章
|
7月前
|
JavaScript Java Android开发
uniapp通过蓝牙传输数据 (安卓)
uniapp通过蓝牙传输数据 (安卓)
330 1
|
7月前
|
XML 物联网 API
Android Ble蓝牙App(五)数据操作
Android Ble蓝牙App(五)数据操作
710 0
|
4月前
|
Android开发
Android 配置蓝牙遥控器键值
本文详细介绍了Android系统中配置蓝牙遥控器键值的步骤,包括查看设备号、配置键位映射文件(kl文件)、部署kl文件以及调试过程,确保蓝牙遥控器的按键能正确映射到Android系统对应的按键功能。
179 1
|
7月前
|
Android开发
Android获取蓝牙设备列表的方法
Android获取蓝牙设备列表的方法
552 5
|
7月前
|
定位技术 Android开发
Android 12蓝牙报java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission
Android 12蓝牙报java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission
246 1
|
7月前
|
Android开发
Android监听蓝牙广播
Android监听蓝牙广播
67 1
|
7月前
|
物联网 Android开发
Android Ble蓝牙App(七)扫描过滤
Android Ble蓝牙App(七)扫描过滤
193 0
|
7月前
|
物联网 Android开发
Android Ble蓝牙App(六)请求MTU与显示设备信息
Android Ble蓝牙App(六)请求MTU与显示设备信息
363 0
|
7月前
|
物联网 Android开发
Android Ble蓝牙App(四)UI优化和描述符
Android Ble蓝牙App(四)UI优化和描述符
168 0
|
7月前
|
传感器 监控 物联网
Android Ble蓝牙App(三)特性和属性
Android Ble蓝牙App(三)特性和属性
118 0