Android: загрузка файла в фоновом режиме

Я хочу загрузить файл из Интернета и хранить во внешней памяти. Главное, чтобы он был загружен в фоновом режиме, например, на рынке, когда вы нажмете на install, он загрузит файл apk. Если у кого-то есть какая-то идея, тогда, пожалуйста, скажите мне

Спасибо.

Solutions Collecting From Web of "Android: загрузка файла в фоновом режиме"

Пожалуйста, найдите эту ссылку. В нем объясняется, как загрузить файл из Интернета. Вы должны поместить этот код в поток. Он используется для фонового процесса. Вы должны ссылаться на поток для фоновых процессов или использовать AsyncTask, который также используется для фонового процесса.

Это еще один код для файла downloaf, используя задачу Asyc с уведомлением countinues

public class DownloadTask extends AsyncTask<Integer, Integer, Void>{ private NotificationHelper mNotificationHelper; private static final String PEFERENCE_FILE = "preference"; private static final String ISDOWNLOADED = "isdownloaded"; SharedPreferences settings; SharedPreferences.Editor editor; Context context; public DownloadTask(Context context){ this.context = context; mNotificationHelper = new NotificationHelper(context); } protected void onPreExecute(){ //Create the notification in the statusbar mNotificationHelper.createNotification(); } @Override protected Void doInBackground(Integer... integers) { //This is where we would do the actual download stuff //for now I'm just going to loop for 10 seconds // publishing progress every second int count; try { URL url = new URL("filename url"); URLConnection connexion = url.openConnection(); connexion.connect(); int lenghtOfFile = connexion.getContentLength(); Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile); InputStream input = new BufferedInputStream(url.openStream()); //OutputStream output = new FileOutputStream("/sdcard/foldername/temp.zip"); OutputStream output = new FileOutputStream("/sdcard/foldername/himages.zip"); byte data[] = new byte[1024]; long total = 0; while ((count = input.read(data)) != -1) { total += count; //publishProgress(""+(int)((total*100)/lenghtOfFile)); Log.d("%Percentage%",""+(int)((total*100)/lenghtOfFile)); onProgressUpdate((int)((total*100)/lenghtOfFile)); output.write(data, 0, count); } output.flush(); output.close(); input.close(); File file = new File(Environment.getExternalStorageDirectory() + "/foldername/"+"_images.zip"); File path = new File(Environment.getExternalStorageDirectory() + "/foldername"); try { ZipUtil.unzip(file,path); settings = this.context.getSharedPreferences(PEFERENCE_FILE, 0); editor = settings.edit(); editor.putBoolean(ISDOWNLOADED, true); editor.commit(); } catch (IOException e) { Log.d("ZIP UTILL",e.toString()); } } catch (Exception e) {} return null; } protected void onProgressUpdate(Integer... progress) { //This method runs on the UI thread, it receives progress updates //from the background thread and publishes them to the status bar mNotificationHelper.progressUpdate(progress[0]); } protected void onPostExecute(Void result) { //The task is complete, tell the status bar about it HyundaiApplication.serviceState=false; mNotificationHelper.completed(); } } 

Это помощник уведомления

 public class NotificationHelper { private Context mContext; private int NOTIFICATION_ID = 1; private Notification mNotification; private NotificationManager mNotificationManager; private PendingIntent mContentIntent; private CharSequence mContentTitle; public NotificationHelper(Context context) { mContext = context; } /** * Put the notification into the status bar */ public void createNotification() { //get the notification manager mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); //create the notification int icon = android.R.drawable.stat_sys_download; CharSequence tickerText = mContext.getString(R.string.download_ticker); //Initial text that appears in the status bar long when = System.currentTimeMillis(); mNotification = new Notification(icon, tickerText, when); //create the content which is shown in the notification pulldown mContentTitle = mContext.getString(R.string.content_title); //Full title of the notification in the pull down CharSequence contentText = "0% complete"; //Text of the notification in the pull down //you have to set a PendingIntent on a notification to tell the system what you want it to do when the notification is selected //I don't want to use this here so I'm just creating a blank one Intent notificationIntent = new Intent(); mContentIntent = PendingIntent.getActivity(mContext, 0, notificationIntent, 0); //add the additional content and intent to the notification mNotification.setLatestEventInfo(mContext, mContentTitle, contentText, mContentIntent); //make this notification appear in the 'Ongoing events' section mNotification.flags = Notification.FLAG_ONGOING_EVENT; //show the notification mNotificationManager.notify(NOTIFICATION_ID, mNotification); } /** * Receives progress updates from the background task and updates the status bar notification appropriately * @param percentageComplete */ public void progressUpdate(int percentageComplete) { //build up the new status message CharSequence contentText = percentageComplete + "% complete"; //publish it to the status bar mNotification.setLatestEventInfo(mContext, mContentTitle, contentText, mContentIntent); mNotificationManager.notify(NOTIFICATION_ID, mNotification); } /** * called when the background task is complete, this removes the notification from the status bar. * We could also use this to add a new 'task complete' notification */ public void completed() { //remove the notification from the status bar mNotificationManager.cancel(NOTIFICATION_ID); } } 

Спасибо.

Если ваше приложение использует 2,3, вы можете использовать DownloadManager api, предоставленный в SDK android. Кроме того, вы можете написать свой собственный сервис для этой цели.

Поскольку Android имеет открытый исходный код, вы можете просто портировать DownloadManager в android 2.3, чтобы снизить версию для Android