package com.google.mcommerce.sample.android.chapter09.location; import java.util.List; import android.app.Activity; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.location.LocationProvider; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import com.google.mcommerce.sample.android.R; public class LocationServiceActivity extends Activity implements LocationListener { private static final String[] A = { "n/a", "fine", "coarse" }; private static final String[] P = { "n/a", "low", "medium", "high" }; private static final String[] S = { "out of service", "temporarily unavailable", "available" }; private LocationManager mgr; private TextView output; private String best; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.c09_location_layout); mgr = (LocationManager) getSystemService(LOCATION_SERVICE); output = (TextView) findViewById(R.id.location_text); Log.d("LocationService", "test1"); log("Location providers:"); Log.d("LocationService", "test2"); dumpProviders(); Log.d("LocationService", "test3"); Criteria criteria = new Criteria(); best = mgr.getBestProvider(criteria, true); log("\nBest provider is: " + best); log("\nLocations (starting with last known):"); Location location = mgr.getLastKnownLocation(best); dumpLocation(location); } @Override protected void onResume() { super.onResume(); // Start updates (doc recommends delay >= 60000 ms) mgr.requestLocationUpdates(best, 15000, 1, this); } @Override protected void onPause() { super.onPause(); // Stop updates to save power while app paused mgr.removeUpdates(this); } public void onLocationChanged(Location location) { dumpLocation(location); } public void onProviderDisabled(String provider) { log("\nProvider disabled: " + provider); } public void onProviderEnabled(String provider) { log("\nProvider enabled: " + provider); } public void onStatusChanged(String provider, int status, Bundle extras) { log("\nProvider status changed: " + provider + ", status=" + S[status] + ", extras=" + extras); } private void log(String string) { output.append(string + "\n"); } private void dumpProviders() { List<String> providers = mgr.getAllProviders(); Log.d("LocationService", "test4"); for (String provider : providers) { dumpProvider(provider); } } private void dumpProvider(String provider) { Log.d("LocationService", "test5"); LocationProvider info = mgr.getProvider(provider); Log.d("LocationService", info.getName()); StringBuilder builder = new StringBuilder(); builder.append("LocationProvider[").append("name=") .append(info.getName()).append(",enabled=") .append(mgr.isProviderEnabled(provider)) .append(",getAccuracy=").append(A[info.getAccuracy()]) .append(",getPowerRequirement=") .append(P[info.getPowerRequirement()]) .append(",hasMonetaryCost=").append(info.hasMonetaryCost()) .append(",requiresCell=").append(info.requiresCell()) .append(",requiresNetwork=").append(info.requiresNetwork()) .append(",requiresSatellite=").append(info.requiresSatellite()) .append(",supportsAltitude=").append(info.supportsAltitude()) .append(",supportsBearing=").append(info.supportsBearing()) .append(",supportsSpeed=").append(info.supportsSpeed()) .append("]"); Log.d("LocationService", builder.toString()); log(builder.toString()); } private void dumpLocation(Location location) { if (location == null) log("\nLocation[unknown]"); else log("\n" + location.toString()); } }