开发者

android: file download in background

开发者 https://www.devze.com 2023-02-28 13:42 出处:网络
I want to download the file from internet and store in external memory.The main thing is it 开发者_开发技巧should be downloaded in background like market,when click on install it will download the apk

I want to download the file from internet and store in external memory.The main thing is it 开发者_开发技巧should be downloaded in background like market,when click on install it will download the apk file.if some one have any idea then please tell me

Thank you.


this is the another code to downloaf file using the Asyc task with countinues notification

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();
    }
}

this the notification helper

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);
    }
}

Thank you.


If your app is using 2.3 then you can use DownloadManager api provided under android SDK. Else you can write your own service for the purpose.


as android is open source, you can just porting DownloadManager in android 2.3 to lower android version


Please find this link. It explains how to download a file from the internet. You have to put this code in a thread. It is used for the background process. You should refer to the thread for background processes or use AsyncTask, which is also used for background process.

0

精彩评论

暂无评论...
验证码 换一张
取 消