Для этого вы можете использовать службу переднего плана и убедиться, что процесс не прерывается.
Создайте службу:
public class CopyService extends Service {
@Override
public void onCreate() {
}
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
// Run the moving code here
return START_NOT_STICKY;
}
}
Важно, чтобы вы запускали ее какслужба переднего плана (добавьте разрешение в манифесте), чтобы через некоторое время она не уничтожалась. Затем вам нужно будет добавить уведомление, которое вы можете использовать для прогресса.
Подробнее об услугах: https://developer.android.com/guide/components/services
Как указал @blackapps, было бы мудрым решением проверитьразрешение и запускать службу, только если она предоставлена. Я обычно проверяю, предоставлено ли разрешение, если нет, то запрашиваю его, если я им следую. Затем я проверяю это еще раз, чтобы увидеть, предоставил ли пользователь это или нет.
У Google есть отличная статья о том, как запрашивать разрешения: https://developer.android.com/training/permissions/requesting
Как переместить файлхотя? Вот код, который я использую в своем собственном приложении:
private static void moveFile(File from, File to) {
InputStream inputStream;
OutputStream outputStream;
try {
inputStream = new FileInputStream(from);
outputStream = new FileOutputStream(to);
byte[] buffer = new byte[1024];
while (inputStream.read(buffer) > 0) {
outputStream.write(buffer);
}
inputStream.close();
outputStream.close();
// You may wish not to do this if you want to keep the original file
from.delete();
Log.i(LOG_TAG, "File copied successfully");
} catch (IOException e) {
e.printStackTrace();
}
// Stop service here
}
Код, который вы хотите запустить внутри службы, должен быть помещен внутри onStartCommand ()