Monday, 10 April 2017

Location Dialog like goggle

how to enable location on dialog click without going to setting screen

//first add permission in to Manifest file.

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

//intialize googleapiclient

private GoogleApiClient googleApiClient;


//check that location enables or not if not open dialog


public void getLocation()
{
    final LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER))
    {
        //what you want to do        locationenable();
    }
    else    {

    }
}


public void locationenable()
{


    googleApiClient = new GoogleApiClient.Builder(context)
            .addApi(LocationServices.API)
            .build();
    googleApiClient.connect();

    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(30 * 1000);
    locationRequest.setFastestInterval(5 * 1000);
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(locationRequest);

    //**************************    builder.setAlwaysShow(true); //this is the key ingredient    //**************************
    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
    result.setResultCallback(new ResultCallback<LocationSettingsResult>()
    {
        @Override        public void onResult(LocationSettingsResult result)
        {
            final Status status = result.getStatus();
            final LocationSettingsStates state = result.getLocationSettingsStates();
            switch (status.getStatusCode())
            {
                case LocationSettingsStatusCodes.SUCCESS:
                    // All location settings are satisfied. The client can initialize location                    // requests here.
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    // Location settings are not satisfied. But could be fixed by showing the user                    // a dialog.                    try                    {
                        // Show the dialog by calling startResolutionForResult(),                        // and check the result in onActivityResult().                        status.startResolutionForResult(
                                (Activity) context, 1000);
                    }
                    catch (IntentSender.SendIntentException e)
                    {
                        // Ignore the error.                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    // Location settings are not satisfied. However, we have no way to fix the                    // settings so we won't show the dialog.                    break;
                case LocationSettingsStatusCodes.CANCELED:
                    // Location settings are not satisfied. However, we have no way to fix the                    // settings so we won't show the dialog.                    break;

            }
        }
    });


}

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);


    if (requestCode == 1000)
    {      
        getLocation();
    }
    else
    {

    }


}


//above code is for enable location on dialog click and call getlocation() method in onresume if latitude or latitude not found

//now providing the location manager class through u can get all the location related stuff.

// Gps Tracker class is providing all the location listner properties for getting lattitude ,longitude ,address on lat-lng etc.


import android.Manifest;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
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;
import android.util.Log;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

public class GPSTracker extends Service implements LocationListener
{
    private final Context mContext;
    // flag for GPS status    public boolean isGPSEnabled = false;
    // flag for network status    public boolean isNetworkEnabled = false;
    // flag for GPS status    boolean canGetLocation = false;
    Location location; // location    double latitude; // latitude    double longitude; // longitude    // The minimum distance to change Updates in meters    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters    // The minimum time between updates in milliseconds    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute    // Declaring a Location Manager    protected LocationManager locationManager;
    SharedPreferences prefs;

    public GPSTracker(Context context)
    {
        this.mContext = context;
        getLocation();
    }

    public Location 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;
                // First get location from Network Provider                if (isNetworkEnabled)
                {
                    if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, 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 location;
                    }
                    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;
    }

    /**     * Get list of address by latitude and longitude     *     * @return null or List<Address>
     */    public List<Address> getGeocoderAddress(Context context)
    {
        if (location != null)
        {
            Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
            try            {
                List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
                return addresses;
            }
            catch (IOException e)
            {
                // e.printStackTrace();                Log.e("Error : Geocoder", "Impossible to connect to Geocoder", e);
            }
        }

        return null;
    }

    /**     * Try to get AddressLine     *     * @return null or addressLine     */    public String getAddressLine(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        String result = "";
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
            {
                sb.append(address.getAddressLine(i)).append("\n");
            }
            sb.append(address.getLocality()).append("\n");
            sb.append(address.getCountryName());
            result = sb.toString();

            return result;
        }
        else        {
            return null;
        }
    }

    /**     * Try to get Locality     *     * @return null or locality     */    public String getLocality(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            String locality = address.getLocality();

            return locality;
        }
        else        {
            return null;
        }
    }

    /**     * Try to get Postal Code     *     * @return null or postalCode     */    public String getPostalCode(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            String postalCode = address.getPostalCode();

            return postalCode;
        }
        else        {
            return null;
        }
    }

    /**     * Try to get CountryName     *     * @return null or postalCode     */    public String getCountryName(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            String countryName = address.getCountryName();

            return countryName;
        }
        else        {
            return null;
        }
    }

    /**     * Stop using GPS listener Calling this function will stop using GPS in your app     */    public void stopUsingGPS()
    {
        if (locationManager != null)
        {
            if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, 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     */    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;
    }

    /**     * Function to check GPS/wifi enabled     *     * @return boolean     */    public boolean canGetLocation()
    {
        return this.canGetLocation;
    }

    /**     * Function to show settings alert dialog On pressing Settings button will lauch Settings Options     */    public void showSettingsAlert()
    {
        android.support.v7.app.AlertDialog.Builder alertDialog = new android.support.v7.app.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?");
        // 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();
    }

    @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 intent)
    {
        // TODO Auto-generated method stub        return null;
    }

}


//full and final code for location enable and get latitude longitude for just intializing the Gps tracker class and u can do all the location related stuff.


By Darshan Patel

No comments:

Post a Comment

Run/install/debug Android applications over Wi-Fi ?

Open Teminal/cmd --------------- Below steps is for Android 10 or lower Step 1 - Connect the device via USB and make sure debugging is work...