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());
}
}