如何解决如何在 Activity 而不是单独的类中实现 WorkManager 以便我可以使用 Activity 变量?
我想在 WorkManager 中使用我的活动中的大部分变量,以便即使用户不在应用程序上也能够发送通知。如何在 WorkManager 中使用来自我的活动的变量来使用这些变量生成通知?
public class UploadTask extends Worker {
public static Context context;
public static final String FLIGHT_NUMBER="";
public static final String DEPARTURE_DATE = "";
private FlightRepository repository;
public UploadTask(@NonNull Context context,@NonNull WorkerParameters workerParams) {
super(context,workerParams);
}
@NonNull
@Override
public Worker.Result doWork() {
String catering = getInputData().getString(CATERING);
String flightnumber = getInputData().getString(FLIGHT_NUMBER);
String departuredate = getInputData().getString(DEPARTURE_DATE);
System.out.println("flightnumber"+ flightnumber); //it prints departure date here,why?
Flight flight = repository.getFlight(flightnumber,departuredate);
String catering = flight.getCatering_start_time();
createNotificationChannel();
NotificationCompat.Builder builder = new NotificationCompat.Builder(context,"firstNotif")
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Notification")
.setContentText("Started at " + catering)
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
notificationManager.notify(110,builder.build());
return Worker.Result.success();
}
private void createNotificationChannel() {
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.O){
CharSequence name = "channel";
String description = "Notif Channel";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel("firstNotif",name,importance);
channel.setDescription(description);
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(channel);
}
}
}
在我的活动范围内
UploadTask.context = FlightDescriptionActivity.this;
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(UploadTask.class,15,TimeUnit.MINUTES)
.setInputData(new Data.Builder()
.putString(UploadTask.FLIGHT_NUMBER,flightNumber)
.putString(UploadTask.DEPARTURE_DATE,departure_date)
.build())
.build();
WorkManager.getInstance().enqueue(periodicWorkRequest);
以下是我的存储库的代码。 存储库
public class FlightRepository {
private FlightDao flightDao;
private LiveData<List<Flight>> allFlights;
public FlightRepository(Application application) {
FlightDatabase database = FlightDatabase.getInstance(application);
flightDao = database.flightDao();
allFlights = flightDao.getAllFlights();
}
public void insert(Flight flight) {
new InsertFlightAsyncTask(flightDao).execute(flight);
}
public void update(Flight flight) {
new UpdateFlightAsyncTask(flightDao).execute(flight);
}
public void delete(Flight flight) {
new DeleteFlightAsyncTask(flightDao).execute(flight);
}
public void deleteAllFlights() {
new DeleteAllFlightsAsyncTask(flightDao).execute();
}
public LiveData<List<Flight>> getAllFlights() {
return allFlights;
}
public Flight getFlight(String flightNumber,String date){
return flightDao.getFlight(flightNumber,date);
}
public boolean existsFlight(String flightNumber,String date){
return flightDao.existsFlight(flightNumber,date);
}
}
如何在我的 Worker
类中初始化它?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。