- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是当前状态/情况:我有一个 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/
我正在为 Google Chrome 制作一个使用 Downloads API 的扩展程序。我想从网站下载 .jpg 文件。 我已在 list 中使用了这些权限: "permissions": ["d
在函数 chrome.downloads.download 的文件名参数中使用某些字符开始下载时导致“文件名无效”错误。我在文档中找不到任何信息并替换例如:使用 %3A 或 : ;不起作用。 有问题的
我正在尝试创建一个可以一次下载多个文件的扩展程序。 为了实现这一点,我正在使用 chrome 下载 api,这是代码(使用 AngularJS): var fileDownloadProperties
我在 Android 9 中没有遇到这个问题,在 Android 10 中我选择退出 Legacy Storage。但是在 Android 11 中,我无法打开从下载管理器下载的文件。但是,可以从文件
当我尝试在我的应用程序中使用它时,Chrome 告诉我 chrome.downloads 未定义。 这是一个我尝试下载图像的简单示例... list : { "manifest_version":
我正在客户端生成一些内容,我想使用 chrome.downloads.download 下载生成的内容。请注意,下载工作正常,但不知何故下载的文件不包括新行(我使用添加新行 lineContent +
当我执行 chrome.downloads.download 时, 它下载文件并弹出底部的下载栏并显示它,我可以抑制它吗? 例子: /* some code to suppress download
我正在处理超过 100 000 行的表,并使用 DT 包(开发版本 0.1.56)在 Shiny 应用程序中将其可视化。 此外,我使用 DT 扩展作为:按钮,以下载不同格式的数据。然而,虽然 Scro
我想从我的 Google Chrome 扩展程序中完全保存一个网页。我添加了 "downloads", ""权限并确认以下代码将 Google 页面保存到 google.html . chrome
chrome.downloads.download 的默认行为是下载到默认下载文件夹。如果您更改文件夹,它不会记住它。我们可以保存下一次调用的下载位置吗? 引用文献:https://developer
我正在开发 chrome 扩展,我想为可下载文件设置下载位置。所以我正在使用 chrome.downloads.download API saveAs:true。它在 Windows 操作系统中工作正
在 Android 中使用 StorageReference.getStream() 和在 iOS 中使用 FIRStorageReference.dataWithMaxSize 完成的存储文件下载是
更新 我已经通过使用 Blob URL/Object-URL ( URL.createObjectURL(blob) )解决了这个问题(感谢 @DanielHerr ),但是我仍然很好奇为什么在使用
我正在使用 HTML、CSS 和 JS 构建一个小型网站示例项目。 我有一个按钮,点击后应该下载 PDF 示例数据(现在不需要将文档保存在哪里)。 问题:如何使用 HTML 下载 PDF 文档按钮?
我正在从 data.gov 网站下载数据,在此过程中出现以下两种类型的错误: fileUrl = 8 x64 (build 9200) 你必须切换你的 R,从 32-bit至 64-bit避免'cur
我想检查使用 Selenide download() 方法下载文件,但捕获 FileNotFoundException 和错误“拦截 1 个响应”,尽管文件已下载。 我有按钮,点击它会下载一个 zip
“下载管道工件”和“下载构建工件”之间有什么区别?应该使用哪一个?何时使用? 最佳答案 管道工件: 提供一种在管道中的阶段之间或不同管道之间共享文件的方法。它们通常是构建过程的输出,需要由另一个作业使
我们正在尝试从chrome://webrtc-internals下载日志,该方法是在接受调用后在 Electron 后台打开chrome://webrtc-internals,并在 Electron
好吧,所以我前段时间写了这个函数,它运行良好。 基本上我正在下载一个文件,然后检查 chrome://downloads/中是否有 n 个项目以及文件名是否匹配 this.checkDownload
我正在使用 Node + Express 开发一个简单的网络服务器。让我解释一下我遇到奇怪问题的部分。 使用外部脚本(dropbearkey)我生成一个 key 对,生成的私钥存储在服务器的文件系统上
我是一名优秀的程序员,十分优秀!