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);
        }
        
    };