Как исправить [Найдено: 'android.content.Context', требуется: 'androidx.lifecycle.LifecycleOwner'] в BroadcastReceiver? - PullRequest
0 голосов
/ 07 ноября 2019

Это не дубликат, так как моя проблема Wrong 1st argument type. Found: 'android.content.Context', required: 'androidx.lifecycle.LifecycleOwner', и я не получил никакого ответа, чтобы решить эту проблему. Я пытаюсь реализовать диспетчер работы в фоновом сервисе.

Я пытался преобразовать в AppCompatActivity, LifeCycleOwner, ... контекст, который сам по себе также не будет работать ...

ВотКод:

Constraints constraints = new Constraints.Builder()
        .setRequiresCharging(true)
        .build();

final Data data = new Data.Builder()
        .putDouble(USER_LAT, maps.get(i).getUser_lat())
        .putDouble(USER_LNG, maps.get(i).getUser_lng())
        .putLong(MAP_ID, id)
        .putString(METHOD, maps.get(i).getMethod())
        .putString(STATUS, maps.get(i).getStatus())
        .putString(RECIEVED_DATA, maps.get(i).getCreate_time())
        .build();

final OneTimeWorkRequest oneTimeWorkRequest = new OneTimeWorkRequest.Builder(DatabaseToApiWorker.class)
        .setInputData(data)
        .setConstraints(constraints)
        .setInitialDelay(delay, TimeUnit.SECONDS)
        .build();

WorkManager.getInstance().enqueue(oneTimeWorkRequest);
WorkManager.getInstance().getWorkInfoByIdLiveData(oneTimeWorkRequest.getId())
        .observe((LifecycleOwner) context, new Observer<WorkInfo>() {
            @Override
            public void onChanged(WorkInfo workInfo) {
                if (workInfo != null)
                    Log.e("ServiceWorker",workInfo.getState().name());
                if (workInfo.getState().isFinished())
                {
                    if (workInfo.getState() == WorkInfo.State.SUCCEEDED){

                        Data data1 = workInfo.getOutputData();
                        Long id = data1.getLong(DatabaseToApiWorker.MAP_ID_WORKER,0);
                        appDatabase.getMapDAO().deleteIt(id);
                        Log.e("ServiceWorker", String.valueOf(id));
                    } else if (workInfo.getState() == WorkInfo.State.FAILED) {

                        Log.e("ServiceWorker", String.valueOf(id)+" Sending Failed");
                    }

                } else {

                    Log.e("WORKER", String.valueOf(id)+" Failed");
                }
            }
        });

1 Ответ

0 голосов
/ 07 ноября 2019

Итак, решение, в котором я нашел мою проблему, заключалось в реализации пользовательского lifecyclerOwner, вот ссылка .

Вот код: Добавить реализацию:

public class MyLocationService extends BroadcastReceiver implements LifecycleOwner {
private LifecycleRegistry lifecycleRegistry;

В OnReceiveДОБАВИТЬ:

    lifecycleRegistry = new LifecycleRegistry(this);
    lifecycleRegistry.markState(Lifecycle.State.CREATED);

Добавьте это ниже в свой класс:

@NonNull
@Override
public Lifecycle getLifecycle() {
    return lifecycleRegistry;
}

, затем измените контекст на this::getLifecycle

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