2017-02-09 108 views
0

我想连接最近的无线设备。如何获得/计算rssi的最近距离?如何从android连接最近的蓝牙低功耗设备?

例如,房间中有2个可调设备。当我走进那个房间时,我的android设备将从我的位置连接最近的可移动设备。

我正在使用don cordova插件和javascript。这个项目在Android设备上运行。

+0

更高的RSSI colser是一般的设备。但由于设备的TX强度设置,它可能不正确。 –

+0

哪一个更好,使用最高rssi或先计算它以米为单位的距离?我找到它的公式http://developer.radiusnetworks.com/2014/12/04/fundamentals-of-beacon-ranging.html –

+0

你不能计算距离RSSI。不可能。你甚至可以面对更近设备RSSI更低的情况 –

回答

0

您可以使用Android灯塔库: https://altbeacon.github.io/android-beacon-library/

它给出了距离读数(这是不准确),但你可以用它们来检测哪个信标更接近。

一个例子:

public class RangingActivity extends Activity implements BeaconConsumer { 
    protected static final String TAG = "RangingActivity"; 
    private BeaconManager beaconManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ranging); 
     beaconManager = BeaconManager.getInstanceForApplication(this); 
     beaconManager.bind(this); 
    } 
    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     beaconManager.unbind(this); 
    } 
    @Override 
    public void onBeaconServiceConnect() { 
     beaconManager.addRangeNotifier(new RangeNotifier() { 
      @Override 
      public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 
       if (beacons.size() > 0) { 
        Log.i(TAG, "The first beacon I see is about "+beacons.iterator().next().getDistance()+" meters away.");   
       } 
      } 
     }); 

     try { 
      beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null)); 
     } catch (RemoteException e) { } 
    } 
} 

否则,您可以读取RSSI的设备和平均出来过了一段时间,并采取了异常值。越接近的那个越大(幅度越大,越积极)。