В настоящее время у меня есть приложение для Android, где пользователь делает снимок элемента, который затем накладывается на некоторую информацию и сохраняется в виде растрового изображения.Затем у меня есть функция, которая отправляет это изображение с помощью электронной почты в общий почтовый ящик, который был настроен.
Одна из проблем, с которой столкнулась моя компания, заключается в том, что иногда появляются черные пятна, где отключается WI-FI ипоэтому приложение не может отправить изображение.
Мне посоветовали использовать Android WorkManager для планирования синхронизации изображений, которые не были отправлены.
Проблема в том, что я не могу отправить толькорастровое изображение для класса Worker, так как мне нужно запустить полную функцию "sendfile ()", чтобы она отправляла в виде электронной почты?
Вот некоторый код, который я пробую (адаптировано из учебника по SimplifiedCoding :
Вот часть кода, который я пробовал:
MyWorker - рабочий класс:
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() {
Camera1 camera1 = new Camera1();
camera1.sendPortraitImage();
// //getting the input data
// String taskDesc =
getInputData().getString(TASK_DESC);
//
// displayNotification("My Worker",
taskDesc);
// return Result.SUCCESS;
}
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(1, notification.build());
}
}
Функции WorkloadMangerSetUp () и SendFile (): :
public void WorkManagerSetUp() {
//WORKMANAGERCODE
//creating a data object
//to pass the data with workRequest
//we can put as many variables needed
Data data = new Data.Builder()
.putString(MyWorker.TASK_DESC, fileLoc)
.build();
//creating constraints
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED) // you can add as many constraints as you want
.build();
final OneTimeWorkRequest workRequest =
new OneTimeWorkRequest.Builder(MyWorker.class)
.setInputData(data)
.setConstraints(constraints)
.build();
}
public void sendPortraitImage(View vw){
send.setVisibility(View.GONE);
buttonCamera.setVisibility(View.GONE);
bitmap_view = ScreenShott.getInstance().takeScreenShotOfRootView(vw, null);
//TextViewTypeHeader.setVisibility(View.GONE);
//TextViewTypeNo.setVisibility(View.GONE);
//TextViewImageHeader.setVisibility(View.GONE);
//TextViewImageNo.setVisibility(View.GONE);
saveImageToExternalStorage(bitmap_view);
Toast.makeText(getApplicationContext(), "Saved successfully, Check gallery", Toast.LENGTH_SHORT).show();
email = email_auth.EMAIL_FROM;
sub = TypeHeader + " - " + TypeNo + " - " + ImageNo;
msg = "Test AlmaPix";
fileLoc = file.getAbsolutePath();
SharedPreferences info = this.getSharedPreferences("info", MODE_PRIVATE);
info.edit().putString("info", fileLoc).commit();
mail mail = new mail(this,email ,sub, msg);
mail.execute();
WorkManagerSetUp();
WorkManager.getInstance().enqueue(workRequest);
}
Я пытаюсь добиться того, чтобы я смог запустить функцию sendFile () в классе MyWorker, чтобы любые электронные письма, которые былиотправлены, когдаСоединение WI-FI снова активно.
Любая помощь или предложения, я был бы очень признателен!