如何在后台静默使用广播接收器下载文件?
我想在每次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
}
}
我只是想让它下载下载目录中的文件,以便用户以后可以从图库中访问它:)
答案 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()
方法以避免崩溃