J'essaie de trouver la distance entre un Eddy Stone Beacon et le courant de l'utilisateur dans l'appareil Android. Ce que j'ai fait jusqu'ici est, j'ai écrit le code pour détecter la balise la plus proche et cela a fonctionné. Pour aller plus loin j'ai besoin de suggestion que comment je peux réaliser ceci. En utilisant une formule? Pour utiliser Maps? S'il vous plaît fournir ce que je peux faire exactement ..Android: Trouver la distance entre l'emplacement actuel de l'utilisateur et une balise
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import com.estimote.sdk.Beacon;
import com.estimote.sdk.BeaconManager;
import com.estimote.sdk.Region;
import com.estimote.sdk.SystemRequirementsChecker;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private final String TAG = MainActivity.class.getSimpleName();
private BeaconManager mBeaconManager;
private Region mRegion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBeaconManager = new BeaconManager(this);
mBeaconManager.setRangingListener(new BeaconManager.RangingListener() {
@Override
public void onBeaconsDiscovered(Region region, List<Beacon> list) {
if (!list.isEmpty()) {
Log.d(TAG, "onBeaconsDiscovered: " + list.size());
Beacon nearestBeacon = list.get(0);
Log.d(TAG, "UUID: " + nearestBeacon.getProximityUUID());
Log.d(TAG, "Strength: " + nearestBeacon.getRssi());
}
}
});
mRegion = new Region("Ranged Region", null, null, null);
}
@Override
protected void onResume() {
super.onResume();
SystemRequirementsChecker.checkWithDefaultDialogs(this);
mBeaconManager.connect(new BeaconManager.ServiceReadyCallback() {
@Override
public void onServiceReady() {
mBeaconManager.startRanging(mRegion);
}
});
}
@Override
protected void onPause() {
mBeaconManager.stopRanging(mRegion);
super.onPause();
}
}
Edité MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBeaconManager = new BeaconManager(this);
mBeaconManager.setRangingListener(new BeaconManager.RangingListener() {
@Override
public void onBeaconsDiscovered(Region region, List<Beacon> list) {
if (!list.isEmpty()) {
Log.d(TAG, "onBeaconsDiscovered: " + list.size());
Beacon nearestBeacon = list.get(0);
UUID beaconId = nearestBeacon.getProximityUUID();
int strength = nearestBeacon.getRssi();
int minNumber = nearestBeacon.getMinor();
int majorNumber = nearestBeacon.getMajor();
int txPower = nearestBeacon.getMeasuredPower();
Log.d(TAG, "UUID: " + nearestBeacon.getProximityUUID());
Log.d(TAG, "Strength: " + nearestBeacon.getRssi());
Log.d(TAG, "MinNum " + nearestBeacon.getMinor());
Log.d(TAG, "MaxNum: " + nearestBeacon.getMajor());
Log.d(TAG, "Tx: " + nearestBeacon.getMeasuredPower());
double distance;
if (strength == 0) {
distance = -1.0;
Log.d(TAG, "dis1: " + distance);
}
double ratio = strength * 1.0/txPower;
if (ratio < 1.0) {
distance = Math.pow(ratio, 10);
Log.d(TAG, "dis2: " + distance);
} else {
double accuracy = (0.89976) * Math.pow(ratio, 7.7095) +
0.111;
distance = accuracy;
Log.d(TAG, "dis3: " + distance);
}
}
}
});
mRegion = new Region("Ranged Region", null, null, null);
}
@Override
protected void onResume() {
super.onResume();
SystemRequirementsChecker.checkWithDefaultDialogs(this);
mBeaconManager.connect(new BeaconManager.ServiceReadyCallback() {
@Override
public void onServiceReady() {
mBeaconManager.startRanging(mRegion);
}
});
}
@Override
protected void onPause() {
mBeaconManager.stopRanging(mRegion);
super.onPause();
}
}
Merci beaucoup. Maintenant que j'ai trouvé la distance, mais avec la valeur de la courbe ajustée en dur. S'il vous plaît regardez sur mon édition. Comment calculer/obtenir la meilleure valeur de courbe d'ajustement. Toute aide serait vraiment utile. –
Voir la mise à jour ... – Dietatko