gpt4 book ai didi

android - Activity with ProgressBar -> Service -> AsyncTask for downloading - 但如何更新进度?

转载 作者:太空狗 更新时间:2023-10-29 15:30:55 24 4
gpt4 key购买 nike

这是当前状态/情况:我有一个 Activity,它绑定(bind)了一个服务,该服务创建 AsyncTasks,下载各种 Web 资源。这很好用,但当然 ProgressBar 什么也不显示。

之前我有一个创建 AsyncTask 的 Activity,它下载了一些东西。 AsyncTask 获得了包含 ProgressBar 的 View 。所以我可以使用 onProgressUpdate 和 publishProgress 更新进度。显然这不再有效,因为我没有引用 ProgressBar。

那么,你知道如何更新进度吗?

提前致谢。

最佳答案

很好的解释确实只是缺少示例 :)我去扔了它,它就在这里。

public class Detail extends Activity {

private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(DownloadService.CUSTOM_INTENT)) {
mProgressDialog.setProgress(intent.getFlags());
}
}
};

// Flag if receiver is registered
private boolean mReceiversRegistered = false;
// Define a handler and a broadcast receiver
private final Handler mHandler = new Handler();

@Override
protected void onResume() {
super.onResume();

// Register Sync Recievers
IntentFilter intentToReceiveFilter = new IntentFilter();
intentToReceiveFilter.addAction(DownloadService.CUSTOM_INTENT);
this.registerReceiver(mIntentReceiver, intentToReceiveFilter, null, mHandler);
mReceiversRegistered = true;
}

@Override
public void onPause() {
super.onPause();

// Make sure you unregister your receivers when you pause your activity
if(mReceiversRegistered) {
unregisterReceiver(mIntentReceiver);
mReceiversRegistered = false;
}
}
}








public class DownloadService extends Service {
private static final String CLASS_NAME = DownloadService.class.getSimpleName();
private List<Download> downloads = new ArrayList<Download>();
private int currentPosition;
public static final String sdcardPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
private Context ctx;
@Override
public IBinder onBind(Intent arg0) {
ctx = getApplicationContext();
return mBinder;
}


private class DownloadFile extends AsyncTask<String, Integer, String> {

@Override
protected String doInBackground(String... _url) {
Log.d(Constants.LOG_TAG, CLASS_NAME + " Start the background GetNewsTask \nURL :" + _url[0]);
int count;
File finalFile = new File(sdcardPath + Constants.APK_LOCAL_PATH + "/" + splitName(_url[0]));
try {
if (!finalFile.exists()) {
Log.i(Constants.LOG_TAG, CLASS_NAME + " Donwloading apk from the Web");
URL url = new URL(_url[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
// this will be useful so that you can show a tipical 0-100%
// progress bar
int lenghtOfFile = conexion.getContentLength();
// downlod the file
InputStream input = new BufferedInputStream(url.openStream());
File dir = new File(sdcardPath + Constants.APK_LOCAL_PATH);
if (!dir.exists())
dir.mkdirs();
OutputStream output = new FileOutputStream(sdcardPath + Constants.APK_LOCAL_PATH + "/" + splitName(_url[0]));
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
// publishing the progress....
publishProgress((int) (total * 100 / lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} else {
Log.i(Constants.LOG_TAG, CLASS_NAME + " Apk in SDcard");
publishProgress(100);
}
} catch (Exception e) {
}

return null;

}

@Override
protected void onProgressUpdate(Integer... progress) {
Intent i = new Intent();
i.setAction(CUSTOM_INTENT);
i.setFlags(progress[0]);
ctx.sendBroadcast(i);
}
}

private String splitName(String url) {
String[] output = url.split("/");
return output[output.length - 1];
}

public static final String CUSTOM_INTENT = "es.tempos21.sync.client.ProgressReceiver";

private final IDownloadService.Stub mBinder = new IDownloadService.Stub() {

public void downloadAsynFile(String url) throws DeadObjectException {
try {
DownloadFile d = new DownloadFile();
d.execute(url);
} catch (Exception e) {
Log.e(Constants.LOG_TAG, CLASS_NAME + " " +e.getMessage()); }
}


}
};


interface IDownloadService {

void downloadAsynFile(String url);
}

关于android - Activity with ProgressBar -> Service -> AsyncTask for downloading - 但如何更新进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1969611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com