Использование Android WorkManager для запуска функции, если соединение стабильно - PullRequest
0 голосов
/ 19 сентября 2019

В настоящее время у меня есть приложение для 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 снова активно.

Любая помощь или предложения, я был бы очень признателен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...