user2834664
user2834664

Reputation: 43

Run progress dialog untill GPS i.d is not found in Android Application

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

Answers (1)

Luke Villanueva
Luke Villanueva

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

Related Questions