Android How to - Get information from LocationProvider








The following code shows how to Get information from LocationProvider.

Example

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.java2s.myapplication3.app" >

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="java2s.com"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.java2s.myapplication3.app.MainActivity"
            android:label="java2s.com"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

Main layout xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:layout_marginTop="5dp"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/detail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginTop="30dp"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </ScrollView>
</LinearLayout>

Main Activity Java code

package com.java2s.myapplication3.app;
//from  ww w  .j  ava 2 s  .com
import android.app.Activity;
import android.content.Context;
import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.util.Printer;
import android.util.StringBuilderPrinter;
import android.widget.TextView;

import java.util.ArrayList;

// "network" provider will always return null for getLastKnownLocation
// if settings->location and security->Use wireless networks is NOT CHECKED

public class MainActivity extends Activity {

    private LocationManager locationMgr;

    private TextView title;
    private TextView detail;

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

        locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        title = (TextView) findViewById(R.id.title);
        detail = (TextView) findViewById(R.id.detail);
    }

    @Override
    protected void onResume() {
        super.onResume();

        String providerName = getIntent().getStringExtra("PROVIDER_NAME");
        Location lastLocation = locationMgr.getLastKnownLocation(providerName);
        LocationProvider provider = locationMgr.getProvider(providerName);

        StringBuilder sb = new StringBuilder();

        sb.append("location manager data");
        if (lastLocation != null) {
            sb.append("\n");
            Printer printer = new StringBuilderPrinter(sb);
            lastLocation.dump(printer, "last location: ");
        } else {
            sb.append("\nlast location: null\n");
        }
        sb.append("\nprovider properties");
        sb.append("\naccuracy: " + provider.getAccuracy());
        sb.append("\npower requirement: " + provider.getPowerRequirement());
        sb.append("\nhas monetary cost: " + provider.hasMonetaryCost());
        sb.append("\nsupports altitude: " + provider.supportsAltitude());
        sb.append("\nsupports bearing: " + provider.supportsBearing());
        sb.append("\nsupports speed: " + provider.supportsSpeed());
        sb.append("\nrequires cell: " + provider.requiresCell());
        sb.append("\nrequires network: " + provider.requiresNetwork());

        if (providerName.equalsIgnoreCase(LocationManager.GPS_PROVIDER)) {
            GpsStatus gpsStatus = locationMgr.getGpsStatus(null);
            sb.append("\ngps status");
            sb.append("\ntime to first fix: " + gpsStatus.getTimeToFirstFix());
            sb.append("\nmax satellites: " + gpsStatus.getMaxSatellites());
            ArrayList<GpsSatellite> satellites = new ArrayList<GpsSatellite>();
            for (GpsSatellite satellite : gpsStatus.getSatellites()) {
                satellites.add(satellite);
            }
            sb.append("\ncurrent satellites: " + satellites.size());
            if (satellites.size() > 0) {
                for (GpsSatellite satellite : satellites) {
                    sb.append("\nsatellite: " + satellite.getPrn());
                    sb.append("\n   azimuth " + satellite.getAzimuth());
                    sb.append("\n   elevation " + satellite.getElevation());
                    sb.append("\n   signal to noise ratio " + satellite.getSnr());
                }
            }
        }
        title.setText("Provider: " + providerName);
        detail.setText(sb.toString());
    }
}