Reputation: 43
I have made an android app,which helps to find GPS Location with the help of A-GPS, After turning on GPS from settings,i want to run progress dialog untill Latitiude and Longitude is greater than zero. I am a newbie, I have written following code which is not working properly. Any help will be appreciated
Thanks
package com.example.gpsutility;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class GPSActivity extends Activity implements OnClickListener {
Button search,exit;
TextView location_tv;
GpsService gps;
ProgressDialog progressDialog = null;
double latitude,longitude;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gps);
search = (Button)findViewById(R.id.search_button);
exit = (Button)findViewById(R.id.exit_button);
location_tv =(TextView)findViewById(R.id.textview2);
gps = new GpsService(this);
search.setOnClickListener(this);
exit.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v==search)
{
progressDialog = ProgressDialog.show(this, "", "getting location...", true);
new Thread(new Runnable() {
public void run() {
runOnUiThread(new Runnable() {
public void run() {
if(latitude<=0 && longitude<=0)
{
do{
latitude =gps.getLatitude();
longitude = gps.getLongitude();
// location_tv.setText("Location is -\nLat: "+latitude+ "\nLong: "+longitude );
}while(latitude<=0 && longitude<=0);
location_tv.setText(" Location is-\nLat:"+latitude+"\nLong: "+longitude );
progressDialog.dismiss();
}else{
location_tv.setText(" Location is-\nLat:"+latitude+"\nLong: "+longitude );
Log.e("latlong", latitude + ""+longitude);
progressDialog.dismiss();
}
}
});
}
}).start(); }
if(v==exit)
{
finish();
}
}
}
The GPS SERVICE class I am using is
package com.example.gpsutility;
public class GpsService extends Service implements LocationListener {
private final Context mContext;
boolean isGPSEnabled = false;
boolean isNetworkEnabled = false;
boolean canGetLocation = false;
Location location;
double latitude;
double longitude;
public static final long MIN_DISTANCE_CHANGE_FOR_UPDATES=10;
public static final long MIN_TIME_BW_UPDATES=1000*60*1;
protected LocationManager locationManager;
public GpsService(Context context)
{
this.mContext=context;
getLocation();
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
public Location getLocation()
{
try {
locationManager =(LocationManager)
mContext.getSystemService(LOCATION_SERVICE); isGPSEnabled=locationManager.isProviderEnabled(locationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager.isProviderEnabled(locationManager.NETWORK_PROVIDER);
if(!isGPSEnabled || !isNetworkEnabled)
{
showSettingsAlert();
}
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 (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;
}
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 boolean canGetLocation() {
return this.canGetLocation;
}
public void showSettingsAlert(){
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
// Setting Dialog Title
alertDialog.setTitle("GPS settings");
// Setting Dialog Message
alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
// Setting Icon to Dialog
//alertDialog.setIcon(R.drawable.delete);
// 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();
}
}
Upvotes: 1
Views: 1139
Reputation: 2070
Try this.
ProgressDialog progressBar;
int progressStatus = 0;
progressBar = new ProgressDialog(this);
progressBar.setCancelable(false);
progressBar.setMessage("getting location...");
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressBar.setProgress(0);
progressBar.setMax(100);
progressBar.show();
progressBarStatus = 0;
new Thread(new Runnable() {
public void run() {
while (progressBarStatus < 100) {
progressBarStatus = getLocation();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressBarHandler.post(new Runnable() {
public void run() {
progressBar.setProgress(progressBarStatus);
}
});
}
if (progressBarStatus >= 100) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressBar.dismiss();
}
}
}).start();
private int getLocation()
{
GpsService gps = new GpsService(this)
latitude = gps.getLatitude();
longitude = gps.getLongitude();
if(latitude > 0 && longitude > 0)
return 100;
else
return 0;
}
Also, are you sure you need to use it as a service? Or that's only just a name and it is really just a simple class? If it is a simple class and you are just pulling locations via button or any action, you can use the above code. Because when you say Service in android, you are running it on background and and you need to create a handler if you want to perform processes repeatedly every after X intervals and stops when you stop it via code or use stopSelf(). If it really is a service, you need to create a broadcast listener to your activity and use the service to send broadcast and update your UI depending on the broadcast. I hope this helps. Cheers!
Upvotes: 2