Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
38 views8 pages

Android GPS Location Tracker App

This document contains code for an Android app that tracks location using GPS and network providers. The MainActivity requests location permissions if needed and gets the current location from the LocationTrack service when a button is clicked. LocationTrack uses the LocationManager to get location updates from GPS and/or network providers, and provides methods to check if location can be retrieved and show an alert if GPS is disabled.

Uploaded by

Ninad Joshi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views8 pages

Android GPS Location Tracker App

This document contains code for an Android app that tracks location using GPS and network providers. The MainActivity requests location permissions if needed and gets the current location from the LocationTrack service when a button is clicked. LocationTrack uses the LocationManager to get location updates from GPS and/or network providers, and provides methods to check if location can be retrieved and show an alert if GPS is disabled.

Uploaded by

Ninad Joshi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

//dimens.

xml

<?xml version="1.0" encoding="utf-8"?>


<resources>
<dimen name="activity_vertical_margin">8dp</dimen>
<dimen name="activity_horizontal_margin">8dp</dimen>
</resources>

//MainActivity.java

package com.example.gpstracker;

import android.annotation.TargetApi;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Build;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.util.ArrayList;

import static android.Manifest.permission.ACCESS_COARSE_LOCATION;


import static android.Manifest.permission.ACCESS_FINE_LOCATION;

public class MainActivity extends AppCompatActivity {

private ArrayList permissionsToRequest;


private ArrayList permissionsRejected = new ArrayList();
private ArrayList permissions = new ArrayList();

private final static int ALL_PERMISSIONS_RESULT = 101;


LocationTrack locationTrack;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

permissions.add(ACCESS_FINE_LOCATION);
permissions.add(ACCESS_COARSE_LOCATION);

permissionsToRequest = findUnAskedPermissions(permissions);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

if (permissionsToRequest.size() > 0)
requestPermissions((String[]) permissionsToRequest.toArray(new
String[permissionsToRequest.size()]),
ALL_PERMISSIONS_RESULT);
}

Button btn = (Button) findViewById(R.id.btn);

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

locationTrack = new LocationTrack(MainActivity.this);

if (locationTrack.canGetLocation()) {

double longitude = locationTrack.getLongitude();


double latitude = locationTrack.getLatitude();

Toast.makeText(getApplicationContext(),
"Longitude:" + Double.toString(longitude) +
"\nLatitude:" + Double.toString(latitude),
Toast.LENGTH_SHORT).show();
} else {

locationTrack.showSettingsAlert();
}

}
});

private ArrayList findUnAskedPermissions(ArrayList wanted) {


ArrayList result = new ArrayList();

for (Object perm : wanted) {


if (!hasPermission((String) perm)) {
result.add(perm);
}
}

return result;
}

private boolean hasPermission(String permission) {


if (canMakeSmores()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return (checkSelfPermission(permission) ==
PackageManager.PERMISSION_GRANTED);
}
}
return true;
}
private boolean canMakeSmores() {
return (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1);
}

@TargetApi(Build.VERSION_CODES.M)
@Override
public void onRequestPermissionsResult(int requestCode, String[]
permissions, int[] grantResults) {

switch (requestCode) {

case ALL_PERMISSIONS_RESULT:
for (Object perms : permissionsToRequest) {
if (!hasPermission((String) perms)) {
permissionsRejected.add(perms);
}
}

if (permissionsRejected.size() > 0) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {


if (shouldShowRequestPermissionRationale((String)
permissionsRejected.get(0))) {
showMessageOKCancel("These permissions are
mandatory for the application. Please allow access.",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface
dialog, int which) {
if (Build.VERSION.SDK_INT >=
Build.VERSION_CODES.M) {
requestPermissions((String[])
permissionsRejected.toArray(new String[permissionsRejected.size()]),

ALL_PERMISSIONS_RESULT);
}
}
});
return;
}
}

break;
}

private void showMessageOKCancel(String message,


DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(MainActivity.this)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}

@Override
protected void onDestroy() {
super.onDestroy();
locationTrack.stopListener();
}
}

//LocationTrack.java
package com.example.gpstracker;

import android.Manifest;
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 androidx.appcompat.app.AlertDialog;
import androidx.core.app.ActivityCompat;

import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.widget.Toast;

public class LocationTrack extends Service implements LocationListener {

private final Context mContext;


boolean checkGPS = false;
boolean checkNetwork = false;
boolean canGetLocation = false;
Location loc;
double latitude;
double longitude;
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10;
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1;
protected LocationManager locationManager;

public LocationTrack(Context mContext) {


this.mContext = mContext;
getLocation();
}

private Location getLocation() {


try {
locationManager = (LocationManager)
mContext.getSystemService(LOCATION_SERVICE);

// get GPS status


checkGPS =
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

// get network provider status


checkNetwork =
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

if (!checkGPS && !checkNetwork) {


Toast.makeText(mContext, "No Service Provider is available",
Toast.LENGTH_SHORT).show();
} else {
this.canGetLocation = true;

// if GPS Enabled get lat/long using GPS Services


if (checkGPS) {

if (ActivityCompat.checkSelfPermission(mContext,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(mContext,
Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
loc =
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (loc != null) {
latitude = loc.getLatitude();
longitude = loc.getLongitude();
}
}

}
loc =
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

if (checkNetwork) {

if (ActivityCompat.checkSelfPermission(mContext,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(mContext,
Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
}

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

if (locationManager != null) {
loc = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

if (loc != null) {
latitude = loc.getLatitude();
longitude = loc.getLongitude();
}
}

} catch (Exception e) {
e.printStackTrace();
}

return loc;
}

public double getLongitude() {


if (loc != null) {
longitude = loc.getLongitude();
}
return longitude;
}

public double getLatitude() {


if (loc != null) {
latitude = loc.getLatitude();
}
return latitude;
}

public boolean canGetLocation() {


return this.canGetLocation;
}

public void showSettingsAlert() {


AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

alertDialog.setTitle("GPS is not Enabled!");

alertDialog.setMessage("Do you want to turn on GPS?");

alertDialog.setPositiveButton("Yes", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new
Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(intent);
}
});

alertDialog.setNegativeButton("No", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});

alertDialog.show();
}

public void stopListener() {


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) {

return;
}
locationManager.removeUpdates(LocationTrack.this);
}
}

@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onLocationChanged(Location location) {

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {

@Override
public void onProviderEnabled(String s) {

}
@Override
public void onProviderDisabled(String s) {

}
}

You might also like