Tuesday, 2 August 2016

Enable Location Service (GPS) in android programmatically

In Android it is possible to enable location services programmatically by using GoogleApiClient.
This is demo for location services

1-Add google play service to build.gradle file

  compile 'com.google.android.gms:play-services:9.2.1'

2-Create Layout for this

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"    android:layout_width="fill_parent"    android:orientation="vertical"    android:gravity="center">

    <TextView        android:id="@+id/enable_gps"        android:text="enable gps"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_margin="20dp"        android:padding="10dp"        android:textColor="#fff"        android:textStyle="bold"        android:background="#000000"/>

    <TextView        android:id="@+id/disble_gps"        android:text="disable gps"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_margin="20dp"        android:padding="10dp"        android:textStyle="bold"        android:textColor="#fff"        android:background="#000"/>
</LinearLayout>

3- Add permissions to manifest file

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

4- Code in activity

package com.location;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.location.LocationManager;
import android.net.Uri;
import android.provider.Settings;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.LocationSettingsRequest;
import com.google.android.gms.location.LocationSettingsResult;
import com.google.android.gms.location.LocationSettingsStatusCodes;

import java.util.List;


public class MainActivity extends Activity implements View.OnClickListener{

    private TextView Enable_Gps,Disable_Gps;
    private GoogleApiClient googleApiClient;

    final static int REQUEST_LOCATION = 199;


    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Enable_Gps=(TextView)findViewById(R.id.enable_gps);
        Disable_Gps=(TextView)findViewById(R.id.disble_gps);
        Enable_Gps.setOnClickListener(this);
        Disable_Gps.setOnClickListener(this);
    }


    @Override    public void onClick(View v) {
        switch (v.getId()){
            case R.id.enable_gps:
                if(!hasGPSDevice(MainActivity.this)){
                    Toast.makeText(MainActivity.this,"Gps not Supported",Toast.LENGTH_SHORT).show();
                }
                final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

                if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(MainActivity.this)) {
                    Toast.makeText(MainActivity.this,"Gps not enabled",Toast.LENGTH_SHORT).show();
                    enableLoc();
                }else{
                    Toast.makeText(MainActivity.this,"Gps already enabled",Toast.LENGTH_SHORT).show();
                }
                // turnGPSOn();                break;
            case R.id.disble_gps:
                LocationManager loc = (LocationManager) this.getSystemService( Context.LOCATION_SERVICE );
                if( loc.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER ) )
                {
                    Toast.makeText( this, "GPS off", Toast.LENGTH_LONG).show();
                    Intent myIntent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS );
                    startActivity(myIntent);

                }
               /* Toast.makeText(MainActivity.this,"Disable Gps",Toast.LENGTH_SHORT).show();                if (googleApiClient != null) {                    if (googleApiClient.isConnected()) {                        googleApiClient.disconnect();                    }                }                turnGPSOff();*/                break;
        }
    }




    private boolean hasGPSDevice(Context context) {
        final LocationManager mgr = (LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE);
        if (mgr == null)
            return false;
        final List<String> providers = mgr.getAllProviders();
        if (providers == null)
            return false;
        return providers.contains(LocationManager.GPS_PROVIDER);
    }


    private void enableLoc() {

        if (googleApiClient == null) {
            googleApiClient = new GoogleApiClient.Builder(this)
                    .addApi(LocationServices.API)
                    .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                        @Override                        public void onConnected(Bundle bundle) {

                        }

                        @Override                        public void onConnectionSuspended(int i) {
                            googleApiClient.connect();
                        }
                    })
                    .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                        @Override                        public void onConnectionFailed(ConnectionResult connectionResult) {

                            Log.d("Location error","Location error " + connectionResult.getErrorCode());
                        }
                    }).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);

            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();
                    switch (status.getStatusCode()) {
                        case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                            try {
                                // Show the dialog by calling startResolutionForResult(),                                // and check the result in onActivityResult().                                status.startResolutionForResult(MainActivity.this, REQUEST_LOCATION);
                            } catch (IntentSender.SendIntentException e) {
                                // Ignore the error.                            }
                            break;
                    }
                }
            });
        }

    }
    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        switch (requestCode) {
            case REQUEST_LOCATION:
                switch (resultCode) {
                    case Activity.RESULT_CANCELED: {
                        // The user was asked to change settings, but chose not to                        finish();
                        break;
                    }
                    default: {
                        break;
                    }
                }
                break;
        }

    }

}






No comments:

Post a Comment