Java Android App Development Course, Obtaining User Location

User location information is a very important element in Android app development. To provide personalized services to users and enhance the functionality of our app, we need to understand the user’s current location. In this article, we will explain in detail how to obtain user location in Android apps using Java and provide related example code.

1. The Necessity of Acquiring User Location

Let’s explore why obtaining user location is important and what functionalities can be implemented through it. For example:

  • Location-Based Services: You can recommend nearby restaurants, cafes, etc., based on the user’s current location.
  • Navigation Feature: If the user inputs a starting point and a destination, the app can guide them along the optimal route.
  • Location History: You can record places the user has visited and analyze them based on this information.

2. Overview of Android Location Services

In Android, you can use the Location API of Google Play Services to easily obtain user location. This API helps determine the user’s location through information from GPS, Wi-Fi, cellular towers, and more.

3. Project Setup

First, you need to create a new project in Android Studio and add the necessary libraries.

3.1. Gradle File Setup

build.gradle (Module: app)
dependencies {
    implementation 'com.google.android.gms:play-services-location:21.0.1'
}

By adding the above Gradle dependency, you can use the location API through Google Play Services.

3.2. Update AndroidManifest.xml

You need to specify the permissions required to use location information in the AndroidManifest.xml file.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.locationapp">

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

    <application ...>
        ...
    </application>
</manifest>

4. Requesting Location Permissions

To access the user’s location, you need to request location permissions. On Android 6.0 (API Level 23) and above, permissions must be requested at runtime. Here’s how to request permissions.

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
        LOCATION_PERMISSION_REQUEST_CODE);
}

5. Acquiring Location Data

Now that we have obtained permissions, we will write a class to fetch the user’s location. Below is the code to get the user’s location.

public class MainActivity extends AppCompatActivity {

    private FusedLocationProviderClient fusedLocationClient;

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

        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

        // Get latitude and longitude
        getLocation();
    }

    private void getLocation() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && 
            ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        
        fusedLocationClient.getLastLocation()
            .addOnSuccessListener(this, new OnSuccessListener() {
                @Override
                public void onSuccess(Location location) {
                    // Successfully obtained location
                    if (location != null) {
                        double latitude = location.getLatitude();
                        double longitude = location.getLongitude();
                        Toast.makeText(MainActivity.this, "Latitude: " + latitude + ", Longitude: " + longitude, Toast.LENGTH_LONG).show();
                    }
                }
            });
    }
}

6. Receiving Location Updates

To receive real-time location updates as the user moves, you need to use the LocationRequest object to request location updates. Here’s how to set up location updates.

private void startLocationUpdates() {
    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setInterval(10000); // Update every 10 seconds
    locationRequest.setFastestInterval(5000); // Fastest update interval 
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    LocationCallback locationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            if (locationResult == null) {
                return;
            }
            for (Location location : locationResult.getLocations()) {
                // Called whenever the location changes
                if (location != null) {
                    double latitude = location.getLatitude();
                    double longitude = location.getLongitude();
                    Toast.makeText(MainActivity.this, "Latitude: " + latitude + ", Longitude: " + longitude, Toast.LENGTH_SHORT).show();
                }
            }
        }
    };

    fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
}

7. Stop Location Updates When App is Closed

Continuously tracking a user’s location can drain battery. Therefore, you must stop location updates when a user exits the app.

@Override
protected void onPause() {
    super.onPause();
    fusedLocationClient.removeLocationUpdates(locationCallback);
}

8. Additional Feature: Display Location on Map

Let’s add a feature to display the user’s location on a map. This can be implemented using the Google Maps API.

8.1. Integrating the Map

To use the Google Maps API, you need to generate an API key from Google Cloud Platform and add it to the AndroidManifest.xml.

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="YOUR_API_KEY"/>

8.2. Adding Location Marker to the Map

private GoogleMap mMap;

@Override
protected void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    // Code to display current location
    LatLng currentLocation = new LatLng(latitude, longitude);
    mMap.addMarker(new MarkerOptions().position(currentLocation).title("Current Location"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(currentLocation));
}

9. Conclusion and References

In this tutorial, we explored how to obtain user location in Android apps using Java. We covered requesting location permissions, acquiring location data, and methods for location updates. This will allow you to effectively utilize location information, an important component of Android app development.

9.1. References

Important: When handling location information, you must consider user privacy and provide clear explanations to users regarding the use of their location.