java


How can I retrieve the speed with which user is walking


How can I get current speed of a device user?
I tried calling getSpeed() method on the instance of Location class in my code but speed is always 0.0, after using hasSpeed() method it returned false.
What other option do I have?
I'm using service to get the current device location. The service impleents LocationListener.
Service code:
package org.casetools.contextdisplay.myobservers;
import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.util.Log;
public class GPSTracker extends Service implements LocationListener {
private final Context mContext;
// flag for GPS status
boolean isGPSEnabled = false;
// flag for network status
boolean isNetworkEnabled = false;
// flag for GPS status
boolean canGetLocation = false;
Location location; // location
double latitude; // latitude
double longitude; // longitude
// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 3; // 3 sec
// Declaring a Location Manager
protected LocationManager locationManager;
private float speed;
public GPSTracker(Context context) {
this.mContext = context;
getLocation();
}
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
} else {
this.canGetLocation = true;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
/**
* Stop using GPS listener
* Calling this function will stop using GPS in your app
* */
public void stopUsingGPS(){
if(locationManager != null){
locationManager.removeUpdates(GPSTracker.this);
}
}
/**
* Function to get latitude
* */
public double getLatitude(){
if(location != null){
latitude = location.getLatitude();
}
// return latitude
return latitude;
}
/**
* Function to get longitude
* */
public double getLongitude(){
if(location != null){
longitude = location.getLongitude();
}
// return longitude
return longitude;
}
public Context getContext(){
return this.mContext;
}
/**
* Function to check GPS/wifi enabled
* #return boolean
* */
public boolean canGetLocation() {
return this.canGetLocation;
}
/**
* Function to show settings alert dialog
* On pressing Settings button will lauch Settings Options
* */
public void showSettingsAlert(){
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
// Setting Dialog Title
alertDialog.setTitle("GPS is settings");
// Setting Dialog Message
alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
// On pressing Settings button
alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(intent);
}
});
// on pressing cancel button
alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
// Showing Alert Message
alertDialog.show();
}
#Override
public void onLocationChanged(Location location) {
latitude = location.getLatitude();
longitude = location.getLongitude();
speed = location.getSpeed();
}
#Override
public void onProviderDisabled(String provider) {
}
#Override
public void onProviderEnabled(String provider) {
}
#Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
#Override
public IBinder onBind(Intent arg0) {
return null;
}
public float getDeviceSpeed(){
return this.speed;
}
}
Save the last latitude, longitude and the timestamp when it was read. When you get the next latitude and longitude, determine the distance, then divide by time elapsed. Save the new latitude, longitude and timestamp and repeat.
Google haversine formula for the distance between two coordinates.
You can try RxGpsService (An Android service to retrieve GPS locations and route stats using RxJava). It retrieves a RouteStats object which contains the current speed.

Related Links

Upload a document to dropbox
Hibernate Query Cache , Behavior is not as expected
Server-client connection issues Java
Writing array in Firebase android
Hashtable values not updating
Android app taking forever to download web content as string (WaitForGcToComplete blocked for xx.xxxms for cause HeapTrim?)
Cannot convert int[] array to int[]
How to get value from a string in Android
Android - What is an Handler Message?
String formatting in JTextArea
change color of Jtable cell based on resultset value from msyql
Why doesn't aliasing work in java methods? [duplicate]
bitwise left shift in Java produces the same values…?
getResource returning NullPointerException
Recursive method to print value of each array index in order
Hibernate build query from List<Criterion> with or operators and dynamic Restrictions

Categories

HOME
gitlab
server
google-play
elm
retrofit
uber-api
medical
slick-slider
iggrid
metatrader4
nano-server
dax
phaser
netflix
systemc
jsdoc
sms-gateway
nas
intentfilter
mps
kudan
mmap
crystal-reports-2010
sparse-matrix
fish
facebook-apps
google-cloud-nl
nat
http-status-code-503
cloud-code
wpf-controls
ios5
espeak
gesture
streamsets
ssjs
eclipse-scout
spring-security-kerberos
cubic-spline
google-datalayer
parentheses
filepicker
namecoin
knpmenubundle
azure-sdk
ado.net-entity-data-model
sts-springsourcetoolsuite
intrusion-detection
phishing
py2app
google-web-starter-kit
mathematica-frontend
sigabrt
yaws
suffix-tree
php-internals
freelancer.com-api
jfugue
qtableview
cakephp-3.1
ibaction
graph-drawing
inmobi
directoryservices
dia
typekit
xc16
gui-test-framework
code-access-security
navigationservice
dealloc
hyprlinkr
message-driven-bean
quantlib-swig
inbox
sabredav
eventlistener
type-equivalence
wsdl-2.0
anonymous-methods
dsn
code-cleanup
hirefire
xdomainrequest
appendto
celltable
infrastructure
revisions
perfect-hash
temporal-database
sustainable-pace
grid-system
wsdl.exe
caching-application-block

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App