MainActivity.java
package com.myworker;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.LiveData;
import androidx.work.Constraints;
import androidx.work.Data;
import androidx.work.NetworkType;
import androidx.work.OneTimeWorkRequest;
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkInfo;
import androidx.work.WorkManager;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.util.Observable;
import java.util.Observer;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Data data = new Data.Builder()
.putString(MyWorker.TASK_DESC, "The task data passed from MainActivity")
.build();
Constraints constraints=new Constraints.Builder()
.setRequiredNetworkType( NetworkType.CONNECTED)
.build();
final WorkManager mWorkManager = WorkManager.getInstance(this);
final PeriodicWorkRequest saveRequest = new PeriodicWorkRequest.Builder(MyWorker.class, 15, TimeUnit.MINUTES)
.setConstraints(constraints)
.setInputData(data)
.build();
findViewById(R.id.buttonEnqueue).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mWorkManager.enqueue(saveRequest);
}
});
final TextView textView = findViewById(R.id.textViewStatus);
WorkManager.getInstance(this).getWorkInfoByIdLiveData(saveRequest.getId()).observe(lifecycleOwner, info -> {
if (info != null && info.getState().isFinished()) {
int myResult = info.getOutputData().getInt(KEY_RESULT, myDefaultValue));
// ... do something with the result ...
}
});
}
}
MyWorker.java
package com.myworker;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import androidx.work.Data;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
public class MyWorker extends Worker {
//a public static string that will be used as the key
//for sending and receiving data
public static final String TASK_DESC = "task_desc";
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
String taskDesc = getInputData().getString(TASK_DESC);
displayNotification("My Worker", taskDesc);
//setting output data
Data data = new Data.Builder()
.putString(TASK_DESC, "The conclusion of the task")
.build();
return Result.success(data);
}
private void displayNotification(String title, String task) {
NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel("simplifiedcoding", "simplifiedcoding", NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(channel);
}
NotificationCompat.Builder notification = new NotificationCompat.Builder(getApplicationContext(), "simplifiedcoding")
.setContentTitle(title)
.setContentText(task)
.setSmallIcon(R.mipmap.ic_launcher);
notificationManager.notify(0, notification.build());
}
}
Typowe przykłady ze strony developer.android.com lecz niestety nie działa lifecycleOwner.
Tak mam napisany kod na chwilę obecną by odpalić.
Można wkleić w nowy projekt i automatycznie zobaczyć jak się nie chcę skompilować.