如何使用广播接收器下载文件?

时间:2016-03-29 09:28:41

标签: android

如何在后台静默使用广播接收器下载文件? 我想在每次onReceive被解雇时下载文件。这还需要asynctask吗?下面是我的代码

package com.android.systemmanager;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class FreezerReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
//download wallpaper here
}
}

我只是想让它下载下载目录中的文件,以便用户以后可以从图库中访问它:)

2 个答案:

答案 0 :(得分:0)

我建议您从广播接收for (var i = 0; i < 10; i++) { setTimeout(function () { console.log(i); }, 1000) }

开始IntentService

请参阅this doc以开始使用。

答案 1 :(得分:0)

尝试这样的事情:

@Override
protected void onHandleIntent(Intent intent) {
    Log.e("ok","ok");
    nm = (NotificationManager)  getSystemService(NOTIFICATION_SERVICE);
    mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setContentTitle(
            "Picture Download dnsadg sadgasjdgashgd asgd asjdg asjgd sajgd s")
            .setContentText("Download in progress")
            .setSmallIcon(R.drawable.icon_app).setContentInfo("0%");

    mBuilder.setOngoing(true);  
    File root = new File(Environment.getExternalStorageDirectory()
            + "/aaaa");
    String urlToDownload = "http://dl2.mid.az/endir.php?file=uploads/Exclusive/miri_yusif_-_yoxam_men_mp3.mid.az.mp3";
   // ResultReceiver receiver = (ResultReceiver) intent.getParcelableExtra("receiver");
    try {
        URL url = new URL(urlToDownload);
        URLConnection connection = url.openConnection();
        connection.connect();
        // this will be useful so that you can show a typical 0-100% progress bar
        int fileLength = connection.getContentLength();

        // download the file
        InputStream input = new BufferedInputStream(url.openStream());
        OutputStream output = new FileOutputStream(new File(root.getPath(),
                "ok.mp3"));

        byte data[] = new byte[1024];
        long total = 0;
        int count;
        while ((count = input.read(data)) != -1) {
            total += count;

            progressChange((int)(total * 100) / fileLength);
            // publishing the progress....
         //   Bundle resultData = new Bundle();
         //   resultData.putInt("progress" ,(int) (total * 100 / fileLength));
         //   receiver.send(UPDATE_PROGRESS, resultData);
            output.write(data, 0, count);
        }

        output.flush();
        output.close();
        input.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

   // Bundle resultData = new Bundle();
  //  resultData.putInt("progress" ,100);
  //  receiver.send(UPDATE_PROGRESS, resultData);
}

@Override
public void onDestroy() {
    Log.e("DESTROY", "DESTROY");
    super.onDestroy();
}
void progressChange(int progress){


    if (lastupdate != progress) {
        lastupdate = progress;
        // not.contentView.setProgressBar(R.id.status_progress,
        // 100,Integer.valueOf(progress[0]), false);
        // inform the progress bar of updates in progress
        // nm.notify(42, not);
        if (progress < 100) {
            mBuilder.setProgress(100, Integer.valueOf(progress),
                    false).setContentInfo(progress+"%");
            nm.notify(12, mBuilder.build());
               Intent i = new Intent("com.russian.apps.TabActivity").putExtra("some_msg",progress+"%");
                this.sendBroadcast(i);
        } else {
            mBuilder.setContentText("Download complete")
            // Removes the progress bar
                    .setProgress(0, 0, false).setOngoing(false).setContentInfo("");;

            nm.notify(12, mBuilder.build());

        }

    }

}
}  

您可能希望添加startForeground()方法以避免崩溃