Ich versuche den Abstand zwischen einem Eddy Stone Beacon und dem aktuellen Benutzer in Android-Gerät zu finden. Was ich bisher gemacht habe, ist, dass ich Code geschrieben habe, um den nächsten Beacon zu finden, und es hat funktioniert. Um weiter zu machen, brauche ich einen Vorschlag, wie ich das erreichen kann. Verwenden einiger Formel? So verwenden Sie Google Maps Bitte geben Sie, was kann ich genau das tun ..Android: Ermitteln der Entfernung zwischen dem aktuellen Standort des Benutzers und einem Beacon
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();
}
}
Edited 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();
}
}
Vielen Dank. Nun, da ich die Entfernung gefunden habe, aber mit dem hartkodierten Best-Fit-Kurvenwert. Bitte schau auf meine Bearbeitung. Wie berechnet man den besten Kurvenwert? Jede Hilfe wäre wirklich nützlich. –
Siehe aktualisierte Antwort ... – Dietatko