2017-02-09 7 views
0

Я хочу подключиться к ближайшему устройству. Как получить/рассчитать ближайшее расстояние от rssi?Как подключиться к ближайшему Bluetooth-устройству с низким энергопотреблением от 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 Beacon библиотеку: 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 для устройств, и в среднем их в течение определенного периода времени, и вынимают выбросы. Чем ближе один, тем больше (по величине, более положительным).