Получение местоположения, когда устройство заблокировано - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь найти местоположение. Когда устройство разблокировано, все работает нормально, но когда устройство заблокировано, координаты не приходят.

Вот пример моего сервиса:

public class LocationService extends Service implements GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener{

    @Override
    public void onCreate() {
        super.onCreate();

        buildGoogleApiClient();
        mGoogleApiClient.connect();

        startForeground(1131, new NotificationCompat.Builder(this, "default")
                .setContentText("App")
                .setContentTitle("App Service")
                .setSmallIcon(R.mipmap.enter_icon)
                .build());

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        return START_STICKY;
    }

    @Override
    public void onConnected(Bundle bundle) {
        startCheckLocation()
    }

    private void startCheckLocation() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }

        LocationRequest locationRequest = LocationRequest.create();
        locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
        locationRequest.setFastestInterval(interval);
        locationRequest.setInterval(interval);

        mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

        Intent intent = new Intent(this, LocationService.class);
        mPendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        mFusedLocationClient.requestLocationUpdates(locationRequest, mPendingIntent);
    }

    public static void start(Context context) {
        Intent intent = new Intent(context, LocationService.class);
        context.startService(intent);
    }

}

Я пытался использовать метод getBroadcast () вместо метода getService (), но он работает точно так же.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вы можете использовать библиотеку SimpleLocation для получения текущей широты и долготы.

добавить ниже library в файле build.gradle (Модуль: приложение)

implementation 'com.github.delight-im:Android-SimpleLocation:v1.0.1'

И используйте приведенный ниже код в вашем классе обслуживания

SimpleLocation simpleLocation = new SimpleLocation(LocationService.this);

        double lat = simpleLocation.getLatitude();
        double lon = simpleLocation.getLongitude();

не забудьте добавить разрешение LOCATION в свой файл манифеста.

0 голосов
/ 19 ноября 2018

В моем случае я получаю данные о местоположении через FirebaseJobDispatcher (Google рекомендует использовать WorkManager, но пока он альфа). Я запускаю работу, которая запускается каждые 20 минут, запрашиваю местоположение и сохраняю ее в БД. Вы можете посмотреть пример FirebaseJobDispatcher здесь https://github.com/firebase/firebase-jobdispatcher-android.

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