//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>
//[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import static [Link].ACCESS_COARSE_LOCATION;
import static [Link].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) {
[Link](savedInstanceState);
setContentView([Link].activity_main);
[Link](ACCESS_FINE_LOCATION);
[Link](ACCESS_COARSE_LOCATION);
permissionsToRequest = findUnAskedPermissions(permissions);
if ([Link].SDK_INT >= Build.VERSION_CODES.M) {
if ([Link]() > 0)
requestPermissions((String[]) [Link](new
String[[Link]()]),
ALL_PERMISSIONS_RESULT);
}
Button btn = (Button) findViewById([Link]);
[Link](new [Link]() {
@Override
public void onClick(View view) {
locationTrack = new LocationTrack([Link]);
if ([Link]()) {
double longitude = [Link]();
double latitude = [Link]();
[Link](getApplicationContext(),
"Longitude:" + [Link](longitude) +
"\nLatitude:" + [Link](latitude),
Toast.LENGTH_SHORT).show();
} else {
[Link]();
}
}
});
private ArrayList findUnAskedPermissions(ArrayList wanted) {
ArrayList result = new ArrayList();
for (Object perm : wanted) {
if (!hasPermission((String) perm)) {
[Link](perm);
}
}
return result;
}
private boolean hasPermission(String permission) {
if (canMakeSmores()) {
if ([Link].SDK_INT >= Build.VERSION_CODES.M) {
return (checkSelfPermission(permission) ==
PackageManager.PERMISSION_GRANTED);
}
}
return true;
}
private boolean canMakeSmores() {
return ([Link].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)) {
[Link](perms);
}
}
if ([Link]() > 0) {
if ([Link].SDK_INT >= Build.VERSION_CODES.M) {
if (shouldShowRequestPermissionRationale((String)
[Link](0))) {
showMessageOKCancel("These permissions are
mandatory for the application. Please allow access.",
new [Link]() {
@Override
public void onClick(DialogInterface
dialog, int which) {
if ([Link].SDK_INT >=
Build.VERSION_CODES.M) {
requestPermissions((String[])
[Link](new String[[Link]()]),
ALL_PERMISSIONS_RESULT);
}
}
});
return;
}
}
break;
}
private void showMessageOKCancel(String message,
[Link] okListener) {
new [Link]([Link])
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
@Override
protected void onDestroy() {
[Link]();
[Link]();
}
}
//[Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
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) {
[Link] = mContext;
getLocation();
}
private Location getLocation() {
try {
locationManager = (LocationManager)
[Link](LOCATION_SERVICE);
// get GPS status
checkGPS =
[Link](LocationManager.GPS_PROVIDER);
// get network provider status
checkNetwork =
[Link](LocationManager.NETWORK_PROVIDER);
if (!checkGPS && !checkNetwork) {
[Link](mContext, "No Service Provider is available",
Toast.LENGTH_SHORT).show();
} else {
[Link] = true;
// if GPS Enabled get lat/long using GPS Services
if (checkGPS) {
if ([Link](mContext,
[Link].ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
[Link](mContext,
[Link].ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
[Link](LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
loc =
[Link](LocationManager.GPS_PROVIDER);
if (loc != null) {
latitude = [Link]();
longitude = [Link]();
}
}
}
loc =
[Link](LocationManager.GPS_PROVIDER);
if (checkNetwork) {
if ([Link](mContext,
[Link].ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
[Link](mContext,
[Link].ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
}
[Link](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 = [Link]();
longitude = [Link]();
}
}
} catch (Exception e) {
[Link]();
}
return loc;
}
public double getLongitude() {
if (loc != null) {
longitude = [Link]();
}
return longitude;
}
public double getLatitude() {
if (loc != null) {
latitude = [Link]();
}
return latitude;
}
public boolean canGetLocation() {
return [Link];
}
public void showSettingsAlert() {
[Link] alertDialog = new [Link](mContext);
[Link]("GPS is not Enabled!");
[Link]("Do you want to turn on GPS?");
[Link]("Yes", new
[Link]() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new
Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
[Link](intent);
}
});
[Link]("No", new
[Link]() {
public void onClick(DialogInterface dialog, int which) {
[Link]();
}
});
[Link]();
}
public void stopListener() {
if (locationManager != null) {
if ([Link](mContext,
[Link].ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
[Link](mContext,
[Link].ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
return;
}
[Link]([Link]);
}
}
@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) {
}
}