Android--LocationManager
4908 ワード
private Button btn1 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 4. location manager
System.out.println("Begin to get GPS!!!");
lm = (LocationManager)MainActivity.this.getSystemService(Context.LOCATION_SERVICE);
// 4.0 first get last location info
Location l1 = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location l2 = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (l1 != null || l2 != null) {
Location lastLoc = l1;
if (lastLoc == null || (l2 != null && l2.getTime() > lastLoc.getTime())) {
lastLoc = l2;
}
System.out.println("==================== last GPS begin =====================");
System.out.println("Altitude: " + lastLoc.getAltitude());
System.out.println("Latitude: " + lastLoc.getLatitude());
System.out.println("Longtitude: " + lastLoc.getLongitude());
System.out.println("Date time: " + new Date(lastLoc.getTime()));
System.out.println("Last provider: " + lastLoc.getProvider());
System.out.println("==================== last GPS end =====================");
System.out.println("Now: " + new Date());
long MAX_TIME = 1000*60*10;
long limitTime = System.currentTimeMillis() - MAX_TIME;
if (lastLoc.getTime() >= limitTime) {
System.out.println("No need to request new location!!!");
return;
} else {
System.out.println("Old location is out of date, need to request new location!!!");
}
}
// 4.1
// lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000L, 0.0f, ll);
// lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000L, 0.0f, ll);
// 4.2
// lm.requestSingleUpdate(LocationManager.GPS_PROVIDER, ll, null);
// lm.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, ll, null);
// 4.3
Criteria ct = new Criteria();
ct.setAccuracy(Criteria.ACCURACY_LOW);
ct.setPowerRequirement(Criteria.POWER_LOW);
lm.requestSingleUpdate(ct, ll, null);
// 4.3.1 check whether time out
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("Require GPS time out, stop requesting!!!");
lm.removeUpdates(ll);
}
};
timer.schedule(timerTask, 10*1000); // 10 seconds
}
});
}
private LocationManager lm = null;
private LocationListener ll = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
System.out.println("==================== GPS begin =====================");
System.out.println("Altitude: " + location.getAltitude());
System.out.println("Latitude: " + location.getLatitude());
System.out.println("Longtitude: " + location.getLongitude());
System.out.println("Date time: " + new Date(location.getTime()));
System.out.println("==================== GPS end =====================");
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
System.out.println("onStatusChanged(): provider=" + provider + "; status=" + status);
}
@Override
public void onProviderEnabled(String provider) {
System.out.println("onProviderEnabled(): " + provider);
}
@Override
public void onProviderDisabled(String provider) {
System.out.println("onProviderDisabled(): " + provider);
}
};