I have the following that needs to be included into an Android application, I'm hoping someone could provide some coding samples to illustrate what exactly I'm attempting to achieve here.
The Android App has a Google Maps interface on the screen.
User of the App can browse through the opened Google Map interface and select a particular location.
I want to fetch the GPS coordinates of this location.
Thanks in advance!!
回答1:
Here, Answer. It's working fine. I also found this solution from stack overflow with some problem. But now all resolved and code work well.
Add Permission to manifest AndroidManifest.xml
activity_main.xml
MainActivity.java
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.Toast;publicclassMainActivityextendsAppCompatActivity{Button btnShowLocation;// GPSTracker classGPSTracker gps;@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnShowLocation =(Button) findViewById(R.id.btnShowLocation);// Show location button click event btnShowLocation.setOnClickListener(newView.OnClickListener(){@Overridepublicvoid onClick(View arg0){// Create class object gps =newGPSTracker(MainActivity.this);// Check if GPS enabledif(gps.canGetLocation()){double latitude = gps.getLatitude();double longitude = gps.getLongitude();// \n is for new lineToast.makeText(getApplicationContext(),"Your Location is - \nLat: "+ latitude +"\nLong: "+ longitude,Toast.LENGTH_LONG).show();}else{// Can't get location.// GPS or network is not enabled.// Ask user to enable GPS/network in settings. gps.showSettingsAlert();}}});}}
GPSTracker.java
import android.Manifest;import android.app.AlertDialog;import android.app.Service;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.PackageManager;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.support.v4.app.ActivityCompat;publicclassGPSTrackerextendsServiceimplementsLocationListener{privatefinalContext mContext;// flag for GPS statusboolean isGPSEnabled =false;// flag for network statusboolean isNetworkEnabled =false;// flag for GPS statusboolean canGetLocation =false;Location location;// locationdouble latitude;// latitudedouble longitude;// longitude// The minimum distance to change Updates in metersprivatestaticfinallong MIN_DISTANCE_CHANGE_FOR_UPDATES =10;// 10 meters// The minimum time between updates in millisecondsprivatestaticfinallong MIN_TIME_BW_UPDATES =1000*60*1;// 1 minute// Declaring a Location ManagerprotectedLocationManager locationManager;publicGPSTracker(Context context){this.mContext = context; getLocation();}publicLocation 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 Servicesif(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){if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED &&ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED){// TODO: Consider calling// ActivityCompat#requestPermissions// here to request the missing permissions, and then overriding// public void onRequestPermissionsResult(int requestCode, String[] permissions,// int[] grantResults)// to handle the case where the user grants the permission. See the documentation// for ActivityCompat#requestPermissions for more details.//return TODO;} location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER);if(location !=null){ latitude = location.getLatitude(); longitude = location.getLongitude();}}}}}}catch(Exception e){}return location;}/** * Stop using GPS listener Calling this function will stop using GPS in your * app. * */publicvoid stopUsingGPS(){if(locationManager !=null){if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED &&ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED){// TODO: Consider calling// ActivityCompat#requestPermissions// here to request the missing permissions, and then overriding// public void onRequestPermissionsResult(int requestCode, String[] permissions,// int[] grantResults)// to handle the case where the user grants the permission. See the documentation// for ActivityCompat#requestPermissions for more details.return;} locationManager.removeUpdates(GPSTracker.this);}}/** * Function to get latitude * */publicdouble getLatitude(){if(location !=null){ latitude = location.getLatitude();}// return latitudereturn latitude;}/** * Function to get longitude * */publicdouble getLongitude(){if(location !=null){ longitude = location.getLongitude();}// return longitudereturn longitude;}/** * Function to check GPS/wifi enabled * * @return boolean * */publicboolean canGetLocation(){returnthis.canGetLocation;}/** * Function to show settings alert dialog On pressing Settings button will * lauch Settings Options * */publicvoid showSettingsAlert(){AlertDialog.Builder alertDialog =newAlertDialog.Builder(mContext);// Setting DialogHelp Title alertDialog.setTitle("GPS is settings");// Setting DialogHelp Message alertDialog .setMessage("GPS is not enabled. Do you want to go to settings menu?");// On pressing Settings button alertDialog.setPositiveButton("Settings",newDialogInterface.OnClickListener(){publicvoid onClick(DialogInterface dialog,int which){Intent intent =newIntent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); mContext.startActivity(intent);}});// on pressing cancel button alertDialog.setNegativeButton("Cancel",newDialogInterface.OnClickListener(){publicvoid onClick(DialogInterface dialog,int