I wrote and compiled the program below and ran it but the intended purpose, which is to display the speed to a textView
doesn't function as far as i can tell from running it on my phone.
There are two location output variables, speed
, and ourSpe
because ourSpe
came from a youtube video I watched and it didn't work, and speed
comes from a stack overflow question I looked up. Both helped but neither is getting a result to print out ass I press the Button spedButt
. I think I just wrote the code in the wrong order but I'm also not sure if I'm in using LocationManager
right.
The layout file only has two textViews
and a Button
in a Relativelayout
but stack overflow keeps giving me an error and I can't figure that one out either. I'm having a bad day.
Main Code
package com.example.vitaliy_2.safespeedalert;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class SpeedTest extends AppCompatActivity implements LocationListener {
TextView txt;
TextView txt_2;
Button spedButt;
float curSpe;
float speed;
Location l;
Location mLastLocation;
Location pCurrentLocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_speed_test);
txt = (TextView) findViewById(R.id.speed_display);
txt_2 = (TextView) findViewById(R.id.speed_display_2);
spedButt = (Button) findViewById(R.id.spedButt);
speed = 0;
LocationManager lm = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) !=PackageManager.PERMISSION_GRANTED) {return;}
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
this.onLocationChanged(null);
}
@Override
public void onLocationChanged(final Location location) {
l = location;
if (this.mLastLocation != null)
speed = (float )Math.sqrt(
Math.pow(pCurrentLocation.getLongitude() - mLastLocation.getLongitude(), 2)
+ Math.pow(pCurrentLocation.getLatitude() - mLastLocation.getLatitude(), 2)
) / (pCurrentLocation.getTime() - this.mLastLocation.getTime());
this.mLastLocation = pCurrentLocation;
spedButt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if(l == null){
txt.setText("-.- m/s");
txt_2.setText("-.- m/s");
}else{
if (pCurrentLocation.hasSpeed())
speed = pCurrentLocation.getSpeed();
curSpe = location.getSpeed();
String sent = speed + "m/s";
txt.setText(sent);
String sentTwo = curSpe + "m/s";
txt_2.setText(sentTwo);
}
}
});
}
Answering My own question, This code pops up automatically but there still needs to be a clause that asks for permission.
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
return;
}else{
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, this);
}
this.onLocationChanged(null);