0

我目前正在编写一个应用程序,应该如下:

  • UI 仅包含一个切换按钮。如果打开,则 GPS 位置应发送到外部服务器。如果它被关闭,则不会发生任何事情。

  • 如果 Button 已打开并且应用程序(活动)已关闭,则仍应发送位置,直到 Button 再次关闭。

我怎样才能做到这一点?我在 dev.google.com 和 dev.google.com 上阅读了很多主题和教程,但我无法找到解决我的问题的最佳解决方案。

我目前的做法:

MainActivity.java

public void onClick(View v) {
   if (onOffButton.isChecked()) {
      Intent startIntent = new Intent(this, LocationService.class);
      startService(startIntent);
   } else {
      stopService(new Intent(this, LocationService.class));
   }
}

定位服务.java

public class LocationService extends Service implements LocationListener {

        final public static String START_ACTION = "START_LOCATION";
        final public static int NOTE_ID = 1;

        private int updateRate;

        private LocationManager locationManager;
        private NotificationManager notifyManager;

        @Override
        public IBinder onBind(Intent arg0) {
                return null;
        }

        @Override
        public void onStart(Intent intent, int startId) {
                super.onStart(intent, startId);

                // show popup message
                Toast.makeText(this, getText(R.string.start_message), Toast.LENGTH_SHORT).show();

                // display icon in status bar

                requestLocationUpdates();
        }

        private void requestLocationUpdates() {
                if(locationManager != null)
                        locationManager.removeUpdates(this);

                // get location service
                Criteria crit = new Criteria();
                crit.setPowerRequirement(Criteria.ACCURACY_FINE);
                String bestProvider = getLocationManager().getBestProvider(crit, true);
                getLocationManager().requestLocationUpdates(bestProvider, updateRate * 1000,
                                0 /* minDist */, this);

                LocationService.running = true;
        }

        @Override
        public void onDestroy() {
                super.onDestroy();
                getLocationManager().removeUpdates(this);
                notifyManager.cancel(NOTE_ID);
                Toast.makeText(this, getText(R.string.stop_message), Toast.LENGTH_SHORT).show();
                LocationService.running = false;
        }

        @Override
        public void onLocationChanged(Location location) {
                //Send Location to Server
        }

        @Override
        public void onProviderDisabled(String provider) {
                // TODO stop service, notify user
        }

        @Override
        public void onProviderEnabled(String provider) {
                requestLocationUpdates();
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
                // TODO notify user
        }

        private LocationManager getLocationManager() {
                if (this.locationManager == null)
                        this.locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                return this.locationManager;
        }
}

我从互联网上找到的一个非常旧的 gps 跟踪器得到这个(我知道 onStart() 已被弃用,应该用 onCommandStart() 代替)我只是想知道一般方法是否好..

问候。

4

1 回答 1

0

这种方法看起来不错。您只需要实现回调方法来报告您的位置。

于 2013-03-21T07:09:44.097 回答