I have a problem here and I cant get it to work... I want to get the latest gps positions but all i get is an null pointer exception. It works with the first class GPSActivity but not with the 2nd SmsReceiver.
I read that this is maybe because I have to pass the Context to the 2nd class but I dont know how... please help!
Here comes the code:
GPSActivity.class
:
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class GPSActivity extends Activity {
long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters
long MINIMUM_TIME_BETWEEN_UPDATES = 10000; // in Milliseconds
LocationManager locationManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
locationManager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.getAllProviders();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MINIMUM_TIME_BETWEEN_UPDATES,
MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
new MyLocationListener());
}
public void showCurrentLocation() {
Location location =
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
String message = String.format(
"Current Location \n Longitude: %1$s \n Latitude: %2$s",
location.getLongitude(), location.getLatitude());
Toast.makeText(GPSActivity.this, message,
Toast.LENGTH_LONG).show();
}
}
}
(I stripped the code a bit)
Now, I can call showCurrentLocation and it showes me the long and lat values.
How can I do this here:
SmsReceive.class
(when a sms is received, send the gps coordinates)
import ...
public class SmsReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
GPSActivity myGPS;
myGPS = new GPSActivity();
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null) {
//HERE I GET THE NULL POINTER EXCEPTION
Location loc =
myGPS.locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double varLong = loc.getLongitude();
double varLat = loc.getLatitude();
String locationData = "LONG: " + varLong+ " LAT: " + varLat;
Toast.makeText(context, locationData, Toast.LENGTH_SHORT).show();
}
}
}
thanks!
declare a new locationManager in the smsReceiver class and use the following lines
Create the One class which extends the Service and into this implement the GPS task because in Activity which will stop/pause/destroy and you can't get every time. Service will run into background so you can get the GPS co-ordinate at any time any and define the location object as public static so you can use anywhere into your application.