Я работаю над проектом, в котором есть требование загрузки файлов на сервер. Для загрузки больших файлов загрузка займет много времени. Чтобы избежать этой ситуации, я думал о загрузке файлов из фона. Для загрузки файлов из фона я использовал службу внутри этой службы. Я использую задачу Asyn c для загрузки файлов, проблема заключается в том, что загрузка началась, и если удаление приложения означает, что остановка службы также прекращается. Как решить эту проблему. Пожалуйста, найдите мой фрагмент кода ниже того, что я делал до сих пор
public class BackgroundService extends Service {
ProgressRequestBody.UploadCallbacks callbacks = new ProgressRequestBody.UploadCallbacks() {
@Override
public void onProgressUpdate(int percentage) {
Log.i("percentage", "" + percentage);
}
@Override
public void onError() {
}
@Override
public void onFinish(int finished) {
}
};
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String filePath = intent.getStringExtra("filePath");
final int studentId = intent.getIntExtra("studentId", 0);
int documentType = intent.getIntExtra("type", 0);
uplodeBackground uplodeBackground = new uplodeBackground();
uplodeBackground.execute(filePath, String.valueOf(documentType), String.valueOf(studentId));
return START_STICKY;
}
class uplodeBackground extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... strings) {
ApiInterface apiInterface = ApiClient.getClient().create(ApiInterface.class);
File file = new File(strings[0]);
//RequestBody progressRequestBody = RequestBody.create(MediaType.parse("multipart/*"), file);
ProgressRequestBody progressRequestBody = new ProgressRequestBody(file, callbacks);
MultipartBody.Part[] part = new MultipartBody.Part[2];
part[0] = MultipartBody.Part.createFormData("file", file.getName(), progressRequestBody);
part[1] = MultipartBody.Part.createFormData("documentTypeId", strings[1]);
RequestBody mStudendId = RequestBody.create(MediaType.parse("text/plain"), /*String.valueOf(studentId)*/strings[2]);
Call<JsonObject> call = apiInterface.uploadFile(part, mStudendId);
call.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
if (response.isSuccessful()) {
if (response.body().get("status").getAsInt() == 200) {
Log.i("test", "Uploaded successfully..........");
}
}
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
Log.i("test", "Failed successfully..........");
}
});
return null;
}
}
}
вот так я запускаю службу
Intent intent = new Intent(AddVideoFragment.this, BackgroundService.class);
intent.putExtra("filePath", SelectedFile.getPath());
intent.putExtra("studentId", NewRegistartionController.initializeNewRegistrationController().basicDetailsModel.getStudentId());
intent.putExtra("type", doumentTypeId);
intent.putExtra("contentId", objects[1].toString());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intent);
} else {
startService(intent);
}