Sie müssen Standort-Updates verfolgen, und wenn die Methode onLocationChanged(Location location)
auslöst, können Sie location.getSpeed();
anrufen gibt Ihnen die richtige Geschwindigkeit, wenn Ihr Telefon tatsächlich bewegt.
Aber wenn man es auf Simulator zu testen sind, und Sendeort von Emulator-Controller, wird es immer wieder zurückkehren 0.
Updated with Example
public class LocationService implements LocationListener {
LocationService locationService;
LocationManager locationManager;
Location lastLocation;
private final String TAG = "LocationService" ;
private final String MOCK_LOCAION_PROVIDER = "FAKE_PROVIDER";
LocationService(Context ctx) {
LocationManager locationManager = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);
String mocLocationProvider = MOCK_LOCAION_PROVIDER;
if (locationManager.getProvider(mocLocationProvider) != null) {
locationManager.removeTestProvider(mocLocationProvider);
}
locationManager.addTestProvider(mocLocationProvider, false, false, false, false, true, true, true, 0, 5);
locationManager.setTestProviderEnabled(mocLocationProvider, true);
locationManager.requestLocationUpdates(mocLocationProvider, 0, 0,
this);
try {
List<String> data = new ArrayList<String>();
InputStream is = ctx.getAssets().open("data.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = reader.readLine()) != null) {
data.add(line);
}
// Log.e(TAG, data.size() + " lines");
new MockLocationProvider(locationManager, mocLocationProvider, data).start();
} catch (IOException e) {
e.printStackTrace();
}
}
class MockLocationProvider extends Thread {
private List<String> data;
private LocationManager locationManager;
private String mocLocationProvider;
private String LOG_TAG = "MockLocationProvider";
public MockLocationProvider(LocationManager locationManager, String mocLocationProvider, List<String> data) throws IOException {
this.locationManager = locationManager;
this.mocLocationProvider = mocLocationProvider;
this.data = data;
}
@Override
public void run() {
for (String str : data) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Set one position
String[] parts = str.split(",");
Double latitude = Double.valueOf(parts[0]);
Double longitude = Double.valueOf(parts[1]);
float speed = Float.valueOf(parts[2]);
Location location = new Location(mocLocationProvider);
location.setLatitude(latitude);
location.setLongitude(longitude);
location.setSpeed(speed);
// location.setAltitude(altitude);
// Log.d(LOG_TAG, location.toString());
// set the time in the location. If the time on this location
// matches the time on the one in the previous set call, it will
// be
// ignored
location.setTime(System.currentTimeMillis());
locationManager.setTestProviderLocation(mocLocationProvider, location);
}
}
}
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
Log.e(TAG, "onLocationChanged");
// Get Location Speed Here
Log.d(TAG, "Speed " +location.getSpeed());
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
// Log.e(TAG, "onProviderDisabled : "+provider);
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
// Log.e(TAG, "onProviderEnabled : "+provider);
}
public void onStatusChanged(String provider, int status, Bundle arg2) {
// TODO Auto-generated method stub
// Log.e(TAG, "onStatusChanged : "+status);
}
}
Der obige Code ist eigentlich ein Ort Service-Klasse, Wenn Sie eine Instanz dieser Klasse erstellen, wird ein falscher Standortdienstanbieter (anders als GPS und Netzwerk) registriert und einige falsche Standortparameter von einer bestimmten Datei eingegeben.
Unten ist die data.txt Datei, die latitude,longitude,speed
die obige Klasse diese data.txt Datei und Eingabe gefälschte Lat, Lon und Geschwindigkeit in der Lage ist, durch Thread.sleep()
Aufruf ebenfalls implementiert, sowie Triggerzeitpunkt ändern Ort gelesen hat .
Data.txt Datei
24.856449265609735,67.04308920288086,1.64
24.856749265609735,67.04408920288086,7.64
24.856949265609735,67.04508920288086,11.64
24.857649265609735,67.04716920288086,13.64
24.857949265609735,67.04736920288086,12.64
24.857949265609735,67.04742520288086,8.64
24.857949265609735,67.04747020288086,4.64
24.856749265609735,67.04408920288086,6.11
24.856949265609735,67.04508920288086,2.12
24.857249265609735,67.04608920288086,1.1
24.856949265609735,67.04508920288086,2.13
24.857249265609735,67.04608920288086,0.6
24.856949265609735,67.04508920288086,1.19
24.857249265609735,67.04608920288086,1.6
24.856949265609735,67.04508920288086,2.12
24.857249265609735,67.04608920288086,1.15
24.857849265609735,67.04729920288086,17.64
24.857949265609735,67.04736920288086,12.64
24.857949265609735,67.04739920288086,16.64
24.857949265609735,67.04742520288086,8.64
24.857949265609735,67.04747020288086,4.64
24.856749265609735,67.04408920288086,6.11
24.856949265609735,67.04508920288086,2.12
24.857249265609735,67.04608920288086,1.1
24.856949265609735,67.04508920288086,2.13
24.857249265609735,67.04608920288086,0.6
24.856949265609735,67.04508920288086,1.19
24.857249265609735,67.04608920288086,1.6
24.856949265609735,67.04508920288086,2.12
24.857249265609735,67.04608920288086,1.15
24.857849265609735,67.04729920288086,17.64
24.857949265609735,67.04736920288086,12.64
24.857949265609735,67.04739920288086,16.64
24.857949265609735,67.04742520288086,8.64
24.857949265609735,67.04747020288086,4.64
24.856749265609735,67.04408920288086,6.11
24.856949265609735,67.04508920288086,2.12
24.857249265609735,67.04608920288086,1.1
24.857849265609735,67.04729920288086,17.64
24.857949265609735,67.04736920288086,12.64
24.857949265609735,67.04739920288086,16.64
24.857949265609735,67.04742520288086,8.64
24.857949265609735,67.04747020288086,4.64
24.856749265609735,67.04408920288086,6.11
24.856949265609735,67.04508920288086,2.12
24.857249265609735,67.04608920288086,1.15
24.856949265609735,67.04508920288086,2.13
24.857249265609735,67.04608920288086,0.6
24.856949265609735,67.04508920288086,1.19
24.857249265609735,67.04608920288086,1.6
24.856949265609735,67.04508920288086,2.12
24.857249265609735,67.04608920288086,1.15
24.856949265609735,67.04508920288086,2.13
24.857249265609735,67.04608920288086,0.6
24.856949265609735,67.04508920288086,1.19
24.857249265609735,67.04608920288086,1.6
24.856949265609735,67.04508920288086,2.12
24.857249265609735,67.04608920288086,1.15
Danke für die Antwort, mit Gerät Umzug war nicht möglich, weil ich in LAN arbeiten bin. Außerhalb der Gegend funktionierte GPS nicht für mich. Also habe ich meine Gerätestandorte selbst geändert, indem ich falsche Werte angegeben habe. Still Wert "0". Gibt es eine Möglichkeit, den Ausgang durch Ändern der Positionen zu finden? Geänderte Positionswerte werden korrekt gedruckt, aber der Ausgangswert ist derselbe. –
Verwenden Sie mocklocation, um falschen Wert einzugeben, wenn ja, dann sollten Sie auch location.setSpeed (float meter) einstellen. –
Ich habe gerade fakeGPS App vom Markt heruntergeladen, und jedes Mal, wenn mein Standort Werte und meine Anwendung für output überprüft. Kannst du mir bitte etwas über location.setSpeed (Float Meter) erklären. Wo kann ich das genau benutzen .. ?? –