1) Менеджер загрузок
Android Download Manager был представлен в Android 2.3 как сервис для оптимизации обработки длительных загрузок.
Download Manger обрабатывает HTTP-соединение и отслеживает изменения подключения. Полезно использовать Download.
Менеджер в большинстве ситуаций, особенно когда загрузка может продолжаться в фоновом режиме между сеансами пользователя.
Экземпляры этого класса должны быть получены через getSystemService (String), передав DOWNLOAD_SERVICE.
Приложения, запрашивающие загрузки через этот API, должны зарегистрировать приемник широковещания для ACTION_NOTIFICATION_CLICKED, чтобы соответствующим образом обрабатывать, когда пользователь нажимает на текущую загрузку в уведомлении или в пользовательском интерфейсе загрузок.
2) Запуск службы на переднем плане
Служба переднего плана - это служба, которая считается тем, о чем пользователь активно осведомлен, и, таким образом, не является кандидатом в систему для уничтожения при нехватке памяти. Служба переднего плана должна предоставлять уведомление для строки состояния, которая помещается под заголовком «Постоянно», что означает, что уведомление нельзя отклонить, если служба не остановлена или не удалена с переднего плана.
Например, для загрузки видео из службы должна быть задана функция запуска на переднем плане, поскольку пользователь явно осведомлен о ее работе. Уведомление в строке состояния может указывать текущую загрузку и позволять пользователю запускать действие для взаимодействия с процессом загрузки.
Чтобы запросить, чтобы ваша служба работала на переднем плане, вызовите startForeground (). Этот метод принимает два параметра: целое число, которое однозначно идентифицирует уведомление, и уведомление для строки состояния.
У меня есть видеофайл (формат .MP4), и я хочу позволить пользователю иметь возможность загружать видео на свою SD-карту. В настоящее время я использую этот код, но он не работает ..
String PATHSdcard = "/sdcard/Video/";
public void DownloadFromUrl(String VideoURL, String fileName)
try { URL url = new URL("https://javmed-prod.s3.amazonaws.com/666034cbe81045f2a2da50e5205e376b.mp4");
File file = new File(fileName);
long sTime = System.currentTimeMillis();
URLConnection URLcon = url.openConnection();
InputStream is = URLcon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream(PATHSdcard+file);
fos.write(baf.toByteArray());
fos.close();
} catch (IOException e) {
Log.d("ERROR.......",e+"");
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Environment;
import android.util.Log;
public class VideoSaveSDCARD extends Activity{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ProgressBack PB = new ProgressBack();
PB.execute("");
}
private class ProgressBack extends AsyncTask<String,String,String> {
ProgressDialog PD;
@Override
protected void onPreExecute() {
PD= ProgressDialog.show(LoginPage.this,null, "Please Wait ...", true);
PD.setCancelable(true);
}
@Override
protected void doInBackground(String... arg0) {
downloadFile("http://beta-vidizmo.com/hilton.mp4","Sample.mp4");
}
protected void onPostExecute(Boolean result) {
PD.dismiss();
}
}
private void downloadFile(String fileURL, String fileName) {
try {
String rootDir = Environment.getExternalStorageDirectory()
+ File.separator + "Video";
File rootFile = new File(rootDir);
rootFile.mkdir();
URL url = new URL(fileURL);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
FileOutputStream f = new FileOutputStream(new File(rootFile,
fileName));
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = in.read(buffer)) > 0) {
f.write(buffer, 0, len1);
}
f.close();
} catch (IOException e) {
Log.d("Error....", e.toString());
}
}