Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
- Timer timer1;
- LocationManager lm;
- LocationResult locationResult;
- boolean gps_enabled=false;
- boolean network_enabled=false;
- private GoogleMap mMap;
- private FusedLocationProviderClient mFusedLocationClient;
- public void checkPermission() {
- if (PermissionChecker.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
- PermissionChecker.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
- ) {//Can add more as per requirement
- ActivityCompat.requestPermissions(this,
- new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
- 123);
- }
- }
- public boolean getLocation(Context context, LocationResult result)
- {
- if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) {
- checkPermission();
- }
- //I use LocationResult callback class to pass location value from MyLocation to user code.
- locationResult=result;
- if(lm==null)
- lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
- //exceptions will be thrown if provider is not permitted.
- try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
- try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){}
- //don't start listeners if no provider is enabled
- if(!gps_enabled && !network_enabled)
- return false;
- if(gps_enabled)
- lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
- if(network_enabled)
- lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
- timer1=new Timer();
- timer1.schedule(new GetLastLocation(), 20000);
- return true;
- }
- LocationListener locationListenerGps = new LocationListener() {
- public void onLocationChanged(Location location) {
- timer1.cancel();
- locationResult.gotLocation(location);
- lm.removeUpdates(this);
- lm.removeUpdates(locationListenerNetwork);
- }
- public void onProviderDisabled(String provider) {}
- public void onProviderEnabled(String provider) {}
- public void onStatusChanged(String provider, int status, Bundle extras) {}
- };
- LocationListener locationListenerNetwork = new LocationListener() {
- public void onLocationChanged(Location location) {
- timer1.cancel();
- locationResult.gotLocation(location);
- lm.removeUpdates(this);
- lm.removeUpdates(locationListenerGps);
- }
- public void onProviderDisabled(String provider) {}
- public void onProviderEnabled(String provider) {}
- public void onStatusChanged(String provider, int status, Bundle extras) {}
- };
- class GetLastLocation extends TimerTask {
- @Override
- public void run() {
- if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) {
- checkPermission();
- }
- lm.removeUpdates(locationListenerGps);
- lm.removeUpdates(locationListenerNetwork);
- Location net_loc=null, gps_loc=null;
- if(gps_enabled)
- gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
- if(network_enabled)
- net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
- //if there are both values use the latest one
- if(gps_loc!=null && net_loc!=null){
- if(gps_loc.getTime()>net_loc.getTime())
- locationResult.gotLocation(gps_loc);
- else
- locationResult.gotLocation(net_loc);
- return;
- }
- if(gps_loc!=null){
- locationResult.gotLocation(gps_loc);
- return;
- }
- if(net_loc!=null){
- locationResult.gotLocation(net_loc);
- return;
- }
- locationResult.gotLocation(null);
- }
- }
- public static abstract class LocationResult{
- public abstract void gotLocation(Location location);
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) {
- checkPermission();
- }
- if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M)
- setContentView(R.layout.activity_maps);
- // Obtain the SupportMapFragment and get notified when the map is ready to be used.
- SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
- .findFragmentById(R.id.map);
- mapFragment.getMapAsync(this);
- mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
- mFusedLocationClient.getLastLocation()
- .addOnSuccessListener(this, new OnSuccessListener<Location>() {
- @Override
- public void onSuccess(Location location) {
- // Got last known location. In some rare situations this can be null.
- if (location != null) {
- // ...
- }
- }
- });
- }
- }
Add Comment
Please, Sign In to add comment