fused location not finding a location on new emulator \ code example

Example: how to ask user for his location in android

public class MainActivity extends AppCompatActivity {
  
   //'LocationManager' manages location tracking
   /*'LocationListener' gives us updates about whenever the device moves, it gives us updates on all those */

    LocationManager locationManager;
    LocationListener locationListener;

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

        //STEP 1: Declare and Initialize 'LocationManager' and 'LocationListener'
        //To get users location
        locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

        //To get users permissions and updates about device movement
        locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                Log.i("Location:", location.toString());
            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {

            }

            @Override
            public void onProviderEnabled(String provider) {

            }

            @Override
            public void onProviderDisabled(String provider) {

            }
        };

        //STEP 2: Create a Pop up message that ask the user to access his location

        //The following if statement will execute when the user opens the app for the first time, which means he has
        //not provided permission for anything yet, in which case the we will go ahead and ask for his permission.
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
        } 
        //user has already granted you permission so just go ahead and get updates. In this case the code will not continue to STEP 3.
      	else {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
        }
    }


    //STEP 3: Respond accordingly to whether user granted permission or not
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        //Check if the user granted permission in step 2
        if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            //If Yes, then go ahead and grab the users location user 'LocationManager' and 'LocationListener'
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
            }

        }
    }
}

Tags:

Java Example