O Android getbearing retorna apenas 0,0. Tentando usar para girar o ícone da localização atual

Isso é em parte uma extensão para uma pergunta anterior:Programação do Android, sobreposição de localização do mapa: como alterar o ponto de localização azul padrão, com outra imagem

Eu tenho trabalhado para obter a localização dos dispositivos para exibir no mapa (fácil com a enililocação), mas eu preciso substituir o ícone padrão (bastante fácil, classificado isso) e depois girá-lo para corresponder ao rolamento do dispositivo atual - adquirido do GPS, como precisa ser direção de movimento, não direção o telefone está enfrentando.

Eu estou usando 'getbearing ()' da mesma maneira que eu tenho usado com sucesso 'getlatitude ()' e 'getaltitude ()', mas getbearing sempre retorna 0. (Para ter certeza de que não era o código que gira o ícone que era o problema a variável para o rolamento é impressa em uma visão de texto antes de qualquer outra coisa acontecer)

A coisa muito peculiar é que ele trabalhou duas vezes agora por 5 segundos, e voltou ao 0 - então, em teoria, o código parece correto?

Código segue.

Atenciosamente

usuario

Atividade principal:

<code>package com.nick.kestrel;

import android.content.Context;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;


public class KestrelActivity extends MapActivity {
/** Called when the activity is first created. */

static TextView LocationText;
MapView mapView;


@Override
protected boolean isRouteDisplayed() {
        return false;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

  //Identifies the textview 'locationtext' as the variable LocationText. Planned usage just for debugging
    LocationText = (TextView)findViewById(R.id.locationtext);

  //defines the mapview as variable 'mapView' and enables zoom controls
    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);

    /**
     * Code required to receive gps location. Activates GPS provider, and is set to update only after
     * at least 10 seconds and a position change of at least 10 metres
     */
    LocationListener locationListener = new MyLocationListener();

    //setting up the location manager
    LocationManager locman = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    locman.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, (float) 0.01, locationListener); 

    //Adds a current location overlay to the map 'mapView' and turns on the map's compass

    MyLocation myLocationOverlay = new MyLocation(this, mapView);
    myLocationOverlay.enableMyLocation();
    myLocationOverlay.enableCompass();

    mapView.getOverlays().add(myLocationOverlay);
    mapView.postInvalidate();
}
</code>

}

mylocationenerener

<code>package com.nick.kestrel;

import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;


public class MyLocationListener implements LocationListener {

private boolean hasbearing;

/**
 * Code to run when the listener receives a new location
 */



@Override
public void onLocationChanged(Location locFromGps) {



    //Toast.makeText(getApplicationContext(), "Location changed, Lat: "+locFromGps.getLatitude()+" Long: "+ locFromGps.getLongitude(), Toast.LENGTH_SHORT).show();

    //LocationText.setText("Your Location: Latitude " +locFromGps.getLatitude() + " Longitude: " +locFromGps.getLongitude());

    double dbllatitude = locFromGps.getLatitude();
    double dbllongitude = locFromGps.getLongitude();
    double dblaltitude = locFromGps.getAltitude();
    float bearing = locFromGps.getBearing(); 

    KestrelActivity.LocationText.setText("Your Location: Latitude " + dbllatitude + " Longitude: " +dbllongitude + " Altitude " + dblaltitude + " Bearing: " + bearing);



    hasbearing = locFromGps.hasBearing();


    if (hasbearing =  false) {

        //Toast.makeText(getApplicationContext(), "No bearing", Toast.LENGTH_SHORT).show();

    }
    else
    {
        //Toast.makeText(getApplicationContext(), "I HAZ bearing: " + locFromGps.getBearing(), Toast.LENGTH_SHORT).show();
    }


}

@Override
public void onProviderDisabled(String provider) {
   // called when the GPS provider is turned off (user turning off the GPS on the phone)
}

@Override
public void onProviderEnabled(String provider) {
   // called when the GPS provider is turned on (user turning on the GPS on the phone)
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
   // called when the status of the GPS provider changes

}
</code>

}

minha localização

<code>package com.nick.kestrel;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Point;
import android.location.Location;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;



public class MyLocation extends MyLocationOverlay {
private Context mContext;
static float   mOrientation;

public MyLocation(Context context, MapView mapView) {
    super(context, mapView);
    mContext = context;
}

@Override 
protected void drawMyLocation(Canvas canvas, MapView mapView, Location lastFix, GeoPoint myLocation, long when) {
    // translate the GeoPoint to screen pixels
    Point screenPts = mapView.getProjection().toPixels(myLocation, null);

    // create a rotated copy of the marker
    Bitmap arrowBitmap = BitmapFactory.decodeResource( mContext.getResources(), R.drawable.pin_icon);
    Matrix matrix = new Matrix();
    matrix.postRotate(mOrientation);
    Bitmap rotatedBmp = Bitmap.createBitmap(
        arrowBitmap, 
        0, 0, 
        arrowBitmap.getWidth(), 
        arrowBitmap.getHeight(), 
        matrix, 
        true
    );
    // add the rotated marker to the canvas
    canvas.drawBitmap(
        rotatedBmp, 
        screenPts.x - (rotatedBmp.getWidth()  / 2), 
        screenPts.y - (rotatedBmp.getHeight() / 2), 

        null

    );
    mapView.postInvalidate();

}

public void setOrientation(float newOrientation) {
     mOrientation = newOrientation;
}
</code>

}

questionAnswers(2)

yourAnswerToTheQuestion