Get Current Location using Android Studio With Android M Support
You can get Current location in Android M using Below code...
You can Download full source code here.
GPSTracker.java
package com.example.shivang.currentlocation; import android.Manifest; import android.annotation.TargetApi; 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.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.provider.Settings; import android.support.annotation.Nullable; import android.util.Log; /** * Created by shivang on 09-11-2015. */public class GPSTracker extends Service implements LocationListener{ private final Context mContext; // flag for GPS statusboolean isGPSEnabled = false; // flag for network statusboolean isNetworkEnabled = false; boolean canGetLocation = false; Location location; // locationdouble latitude; // latitudedouble longitude; // longitude// The minimum distance to change Updates in metersprivate static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters // The minimum time between updates in millisecondsprivate static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute // Declaring a Location Managerprotected LocationManager locationManager; public GPSTracker(Context context) { this.mContext = context; getLocation(); } @TargetApi(Build.VERSION_CODES.M) public Location getLocation() { try { locationManager = (LocationManager) mContext.getSystemService(mContext.LOCATION_SERVICE); // getting GPS statusisGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network statusisNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (!isGPSEnabled && !isNetworkEnabled) { // no network provider is enabled} else { this.canGetLocation = true; // First get location from Network Providerif (isNetworkEnabled) { // if(isPermission())if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (mContext.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || mContext.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { //DO OP WITH LOCATION SERVICElocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); } }else { 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 Services 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; } /** * Function to get latitude * */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 longitudereturn longitude; } /** * Function to check if best network provider * @return boolean * */ public boolean canGetLocation() { return this.canGetLocation; } /** * Function to show settings alert dialog * */public void showSettingsAlert(){ AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); // Setting Dialog TitlealertDialog.setTitle("GPS is settings"); // Setting Dialog MessagealertDialog.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 buttonalertDialog.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 buttonalertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); // Showing Alert MessagealertDialog.show(); } @Overridepublic void onLocationChanged(Location location) { } @Overridepublic void onProviderDisabled(String provider) { } @Overridepublic void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Nullable@Overridepublic IBinder onBind(Intent intent) { return null; } public Location getLocationUsingCriteria() { locationManager = (LocationManager) mContext.getSystemService(mContext.LOCATION_SERVICE); android.location.Criteria criteria = new android.location.Criteria(); String best = locationManager.getBestProvider(criteria, true); System.out.println("Best..................."+ best); //since you are using true as the second parameter, you will only get the best of providers which are enabled.canGetLocation = true; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (mContext.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || mContext.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { //DO OP WITH LOCATION SERVICElocation = locationManager.getLastKnownLocation(best); } }else { location = locationManager.getLastKnownLocation(best); } return location; } }
MainActivity.java
package com.example.shivang.currentlocation; import android.location.Location; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GPSTracker gpsTracker = new GPSTracker(this); if(gpsTracker.canGetLocation()){ // Location location = gpsTracker.getLocation();Location location = gpsTracker.getLocationUsingCriteria(); Toast.makeText(this, gpsTracker.getLatitude() + " : " + gpsTracker.getLongitude(), Toast.LENGTH_LONG).show(); }else{ Toast.makeText(this, "Unable to get location!", Toast.LENGTH_LONG).show(); gpsTracker.showSettingsAlert(); } // location.getLatitude();//location.getLongitude(); } }permission:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" />
Reference:
Googling
No comments:
Post a Comment