WorkManager не работает, который после закрытия приложения - PullRequest
0 голосов
/ 15 апреля 2020

WorkManager не работает с периодами c после закрытия приложения.

Ниже приведен мой код,

MainActivity. java

    public class MainActivity extends AppCompatActivity {

    public static final String KEY_TASK_DESC = "key_task_desc";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Data data = new Data.Builder()
                .putString(KEY_TASK_DESC, "Hey I am sending the work data")
                .build();

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

        final PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(MyWorker.class,
                15, TimeUnit.MINUTES)
                .setInputData(data)
                .build();


        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                WorkManager.getInstance(getApplicationContext()).enqueue(request);
            }
        });

        final TextView textView = findViewById(R.id.textView);

        WorkManager.getInstance(getApplicationContext()).getWorkInfoByIdLiveData(request.getId())
                .observe(this, new Observer<WorkInfo>() {
                    @Override
                    public void onChanged(@Nullable WorkInfo workInfo) {

                        if (workInfo != null) {

                            if (workInfo.getState().isFinished()) {

                                Data data = workInfo.getOutputData();

                                String output = data.getString(MyWorker.KEY_TASK_OUTPUT);

                                textView.append(output + "\n");
                            }

                            String status = workInfo.getState().name();
                            textView.append(status + "\n");
                        }
                    }
                });

    }
}

MyWorker. java

    public class MyWorker extends Worker {

    public static final String KEY_TASK_OUTPUT = "key_task_output";

    Context context;

    public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
        this.context=context;
    }

    @NonNull
    @Override
    public Result doWork() {

        Data data = getInputData();
        String desc = data.getString(MainActivity.KEY_TASK_DESC);
        displayNotification("Hey I am your work", desc);

        Data data1 = new Data.Builder()
                .putString(KEY_TASK_OUTPUT, "Task Finished Successfully")
                .build();


        Log.e("DDDDDDDDDDDDDDDDDD",""+data1);


        return Result.retry();
    }

    private void displayNotification(String task, String desc) {

        NotificationManager manager =
                (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel("simplifiedcoding", "simplifiedcoding", NotificationManager.IMPORTANCE_DEFAULT);
            manager.createNotificationChannel(channel);
        }

        NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), "simplifiedcoding")
                .setContentTitle(task)
                .setContentText(desc)
                .setSmallIcon(R.mipmap.ic_launcher);

        manager.notify(1, builder.build());

    }
}
...