У меня такой вопрос, в приложении нужно реализовать работу фоновых процессов по периодическому определению координат пользователей.
Для этого решил использовать Worker
Задачи запускаются следующим образом
public boolean onCreate() {
PeriodicWorkRequest myWorkRequest = new PeriodicWorkRequest.Builder(GeomobyWorker.class, 15, TimeUnit.MINUTES)
.build();
WorkManager.getInstance().enqueue(myWorkRequest);
return true;
}
Т.е. периодически, раз в 15 минут.
В самом Worker
public Result doWork() {
// тут некоторая логика
// потом вызываю BroadcastReceiver
IntentFilter filter = new IntentFilter();
filter.addAction(GeoGPSManager.NEW_INIT_LOCATION);
filter.addAction(GeoGPSManager.NEW_CURRENT_LOCATION);
filter.addAction(GeoBeaconManager.NEW_BEACON_UPDATE);
filter.addAction(NEW_INSTANCE_ID);
filter.addAction(UPDATE_FENCES);
mCtx.registerReceiver(geoServiceReceiver, filter);
mCtx.sendBroadcast(intent);
LocalBroadcastManager.getInstance(mCtx.getApplicationContext()).sendBroadcast(intent);
return Result.success();
}
В принципе все работает, вот только мне нужно чтобы процесс запускался после перегрузки, но в Android 8 я получаю следующую ошибку:
2019-10-03 11:28:02.108 1301-1488/? W/PackageManager: Unknown permission android.permission.ACCESS_BACKGROUND_LOCATION in package com.geomoby.demoapp 2019-10-03 11:28:02.108 1301-1488/? W/PackageManager: Not granting permission android.permission.READ_EXTERNAL_STORAGE to package com.geomoby.demoapp because it was previously installed without 2019-10-03 11:28:02.108 1301-1488/? W/PackageManager: Not granting permission android.permission.READ_PHONE_STATE to package com.geomoby.demoapp because it was previously installed without 2019-10-03 11:28:02.108 1301-1488/? W/PackageManager: Unknown permission android.permission.FOREGROUND_SERVICE in package com.geomoby.demoapp 2019-10-03 11:28:02.108 1301-1488/? W/PackageManager: Not granting permission android.permission.ACCESS_COARSE_LOCATION to package com.geomoby.demoapp because it was previously installed without
В Android 9 менее информативный лог
Background execution not allowed receiving intent BOOT_COMPLETED
В файле манифеста
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.PERMISSION_GRANTED" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.COARSE_LOCATION"/>
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FINE_LOCATION"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
В чем может быть проблема?
Заранее спасибо!
В Андроид Q ввели еще один перемешен на получение локации в бэкграунде. Добавьте в манифест
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
Проверка есть ли у Вас уже такой пермишен (из фрагмента)
fun isBackgroundLocationPermissionGranted(): Boolean {
if(Build.VERSION.SDK_INT != Build.VERSION_CODES.Q) return true
activity?.let {
return ActivityCompat.checkSelfPermission(it, Manifest.permission.ACCESS_BACKGROUND_LOCATION) == PackageManager.PERMISSION_GRANTED
} ?: return false
}
запрос пермишена
fun requestsBackgroundLocationPermissionDialog() {
requestPermissions(arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION), REQUEST_BACKGROUND_LOCATION_PERMISSIONS)
}
ответ запроса вернется в
fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
presenter.checkPermissionsResult(requestCode, permissions, grantResults)
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я реализую RESTFul сервис, позволяющий возвращать информацию о пользователяхУ меня есть два Entity, которые цепляются из БД
Есть программа, которой подается на вход 2 натуральных числа: размеры таблицы (а*b) и строка вида ADD (число) (число)Оба числа являются координатами...
У меня есть отдельный файл с картинками под названием src, в котором файл img и там картинкиФайл Src я назначил права Resources Root
Почему во всех примерах, я вижу вот такое: Integer a = new Integer(242); - хотя этот вариант деприкейтед, в идее прям зачеркивает этот кодПочему никто не показывает...