Android Speicherort getBearing() gibt immer 0 zurück
Habe ich versucht zu implementieren, die eine Funktion für mein Android-app um die Geschwindigkeit und Fahrtrichtung des Geräts, egal wo das Gerät gerichtet ist. Zum Beispiel: Wenn ich mein Android-Gerät ist, wies in Richtung Norden und wenn ich rückwärts in die Süd-Richtung, würde es wieder, dass ich bin bewegt in Richtung Süden.
Ich habe auf der Suche um und ich kam mit einer Möglichkeit, die Lage ist getBearing () - Methode (immer Noch, ich weiß nicht, ob das zu lösen, wird mein ganzes problem). Wenn ich rufe getBearing(), es gibt immer 0.0 aus irgendeinem Grund. Ich habe keine Ahnung, warum. Hier ist mein code:
LocationManager lm;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gcm);
setUpUI(findViewById(R.id.LinearLayout1));
isRegged = false;
//GCM startup
gcm = GoogleCloudMessaging.getInstance(this);
context = getApplicationContext();
gps = new GPSTracker(context);
//gps.startListening(context);
//gps.setGpsCall(this);
/*
* Variables to indicate location and device ID
*/
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (gps.getIsGPSTrackingEnabled())
{
longitude = Double.valueOf(gps.getLongitude()).toString();
latitude = Double.valueOf(gps.getLatitude()).toString();
}
deviceID = telephonyManager.getDeviceId();
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, (float) 0.0,
this);
}
Dies ist, wo ich bin immer das Lager.
@Override
public void onLocationChanged(Location currentLocation)
{
float speed = 0;
float speed_mph = 0;
if (previousLocation != null)
{
float distance = currentLocation.distanceTo(previousLocation);
//time taken (in seconds)
float timeTaken = ((currentLocation.getTime() - previousLocation
.getTime()) / 1000);
//calculate speed
if (timeTaken > 0)
{
speed = getAverageSpeed(distance, timeTaken);
speed_mph = (float) (getAverageSpeed(distance, timeTaken) / 1.6);
}
if (speed >= 0)
{
info_text.setVisibility(View.VISIBLE);
info_text_mph.setVisibility(View.VISIBLE);
DecimalFormat df = new DecimalFormat("#.#");
info_text.setText("Speed: " + df.format(speed) + " " + "km/h");
info_text_mph.setText(" Speed: " + df.format(speed_mph) + " "
+ "mph");
if (speed >= 10 && lm.getProvider(LocationManager.GPS_PROVIDER).supportsBearing())
{
float degree = currentLocation.getBearing();
direction_text.setVisibility(View.VISIBLE);
Log.i(TAG, String.valueOf(degree));
if (degree == 0 && degree < 45 || degree >= 315
&& degree == 360)
{
direction_text.setText("You are: Northbound");
}
if (degree >= 45 && degree < 90)
{
direction_text.setText("You are: NorthEastbound");
}
if (degree >= 90 && degree < 135)
{
direction_text.setText("You are: Eastbound");
}
if (degree >= 135 && degree < 180)
{
direction_text.setText("You are: SouthEastbound");
}
if (degree >= 180 && degree < 225)
{
direction_text.setText("You are: SouthWestbound");
}
if (degree >= 225 && degree < 270)
{
direction_text.setText("You are: Westbound");
}
if (degree >= 270 && degree < 315)
{
direction_text.setText("You are: NorthWestbound");
}
}
}
}
previousLocation = currentLocation;
}
Vielen Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
getBearing()
0 zurück, wenn Sie erhalten Ihre Daten überLocationManager.NETWORK_PROVIDER
da das signal/Genauigkeit ist zu schwach. Versuchen Sie, die GPS provider, GPS und sicher sein, um es zu testen außerhalb (GPS funktioniert nicht in Gebäuden oder in der Mitte von sehr hohen Gebäuden durch Satelliten nicht mit der direkten Kommunikation)Zur Gewährleistung der Anbieter, den Sie gewählt haben, unterstützt getBearing() können Sie die Methode aus
LocationProvider
genanntsupportsBearing ()
welche true zurückgibt, wenn der Anbieter Sie gewählt haben, unterstützt diegetBearing()
nennen.Schließlich stellen Sie sicher, dass die
ACCESS_COARSE_LOCATION
oderACCESS_FINE_LOCATION
Berechtigungen in Ihrem AndroidManifest.xmlCode pro meine Vorschläge wären so etwas wie dieses:
Ressourcen:
http://developer.android.com/reference/android/location/LocationManager.html
http://developer.android.com/reference/android/location/LocationProvider.html
http://www.firstdroid.com/2010/04/29/android-development-using-gps-to-get-current-location-2/
UPDATE: Die Antwort war, dass die zwei Punkte, die verwendet wurden, zu rechnen, getBearing() waren zu eng und daher geben einem ungenauen Ergebnis. Um dies zu beheben, manuell greifen Sie zwei GPS-Punkte, und verwenden Sie die bearingTo (), um ein genaueres Ergebnis.
trueHeading
mit CoreLocation Framework. Gibt es so etwas bei Android? Meine ausführliche Frage ist hier stackoverflow.com/questions/32693424/...