Проверьте местоположение в Alarm Manager - PullRequest
0 голосов
/ 26 апреля 2018

Мне нужно проверять текущее местоположение пользователя каждые 10 минут, даже если пользователь выключил экран или закрыл приложение (не принудительная остановка). Для запуска LocationCheckService я использую AlarmService, но он всегда начинает проверять местоположение (например, onLocationChanged). Как сделать только один запрос на обновление местоположения каждые 10 минут (без onLocationChanged каждый раз) через провайдера сети или GPS?

MainActivity

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, LocationCheckService.class);
        PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, intent, 0);
        manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 100, 200, pendingIntent);
    }
}

LocationCheckService.class

public class LocationCheckService extends Service {
    LocationManager locationManager = null;

    @SuppressLint("MissingPermission")
    @Override
    public void onCreate() {
        locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, new LocationListener(LocationManager.NETWORK_PROVIDER));
        new Timer().schedule(new MyTimer(), 0, 10000);
    }

    @SuppressLint("MissingPermission")
    class MyTimer extends TimerTask {
        @SuppressLint("MissingPermission")
        @Override
        public void run() {
            try {
                Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());

                List<Address> listAddress = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
                if (listAddress != null && listAddress.size() > 0)
                    Log.d(TAG, listAddress.get(0).getCountryCode());

                listAddress = geocoder.getFromLocation(1.3707295, 32.3032414, 1);
                if (listAddress != null && listAddress.size() > 0)
                    Log.d(TAG, listAddress.get(0).getCountryCode());

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


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

    private class LocationListener implements android.location.LocationListener {
        Location mLastLocation;

        public LocationListener(String provider) {
            Log.e(TAG, "LocationListener " + provider);
            mLastLocation = new Location(provider);
        }

        @Override
        public void onLocationChanged(Location location) {
            Log.e(TAG, "onLocationChanged: " + location);
            mLastLocation.set(location);
        }

    @Override
    public void onProviderDisabled(String provider) {
        Log.e(TAG, "onProviderDisabled: " + provider);
    }

    @Override
    public void onProviderEnabled(String provider) {
        Log.e(TAG, "onProviderEnabled: " + provider);
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        Log.e(TAG, "onStatusChanged: " + provider);
    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...