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

Validate currency input in java JTextField/JFormattedTextField
Bukkit plugin - Listener not running?
NullException when creating a GUI for a music synthetizer
SetAlpha for View background in lollipop not working
Java Set Icon to button
Multimap of Multimap Java - Categorize timetable
Geotools: Total area where GridCoverage has value x
Why is scan.nextLine() skips in my Java Program? [duplicate]
Convert String representation of bytes to byte[] in java
Importing xml files into java class. Is it possible in that way?
Defining Java Constants using Bit-Shift Notation
This isn't appending the JLabel to JPanel
Maven does not download dependencies which it requires for an external project
Build path entry is missing in eclipse
Java: Strange output with printstream, why toString doesn't convert?
minecraft wont run on eclipse

Categories

HOME
java
wso2-am
proxy
drivers
tinymce
angular-material
comparison
layout
routes
filtering
amazon-ecs
jsrender
ebean
fingerprint
qt-creator
etl
php-7.1
windows-azure-storage
usergrid
pc
google-static-maps
orleans
kvc
react-css-modules
social-media
atlassian-crucible
quote
file-rename
bosh
fog
catalog
wixsharp
dartium
reportbuilder
leading-zero
elasticsearch-plugin
tasker
mesos-chronos
broadcastreceiver
http-live-streaming
wptoolkit
jedis
winscp-net
statsd
drupal-6
csound
kbuild
nsarray
dtexec
eventkit
specrun
deadbolt-2
grails-tomcat-plugin
gridpane
slicknav
xml-attribute
mongocsharpdriver
nsviewcontroller
skype4py
make-install
packagist
rvest
tform
revolution-r
comobject
0xdbe
operation
apache-commons-fileupload
website-monitoring
nstableviewcell
codeigniter-routing
markers
preferences
expected-exception
seaside
qt-faststart
ocunit
robotics-studio
wsdl-2.0
libstdc++
google-email-migration
bluepill
venn-diagram
qt-jambi
data-loss
infobox
table-footer
visitor-statistic
cxxtest
sortable-tables
gallio
aquaticprime

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