我有一个“下载”按钮的活动,启动IntentService中实施的DownloadManager。一切工作正常,我的问题是:显示进度条或对话框从一个IntentService下载进度
是否有可能从我的DownloadService(它是扩展的IntentService)显示ProgressBar或ProgressDialog,除了在通知栏中显示的进度?
你可以写一个示例代码或伪代码我该怎么做?谢谢
我有一个“下载”按钮的活动,启动IntentService中实施的DownloadManager。一切工作正常,我的问题是:显示进度条或对话框从一个IntentService下载进度
是否有可能从我的DownloadService(它是扩展的IntentService)显示ProgressBar或ProgressDialog,除了在通知栏中显示的进度?
你可以写一个示例代码或伪代码我该怎么做?谢谢
是否有可能从我的 下载服务(有效期延长IntentService)显示进度条或ProgressDialog,除了在通知栏中显示的进度 ?
你可以写一个示例代码或伪代码我该怎么做?感谢 你
你可以使用ResultReceiver达到你的目标。 ResultReceiver实现Parcelable,所以你可以把它传递到IntentService像:
Intent i = new Intent(this, DownloadService.class);
i.putExtra("receiver", new DownReceiver(new Handler()));
<context>.startService(i);
然后在你的onHandlerIntent()所有你需要的是得到你传递给意向接收器和发送目前的进展到ResultReceiver:
protected void onHandleIntent(Intent intent) {
// obtaining ResultReceiver from Intent that started this IntentService
ResultReceiver receiver = intent.getParcelableExtra("receiver");
...
// data that will be send into ResultReceiver
Bundle data = new Bundle();
data.putInt("progress", progress);
// here you are sending progress into ResultReceiver located in your Activity
receiver.send(Const.NEW_PROGRESS, data);
}
而且ResultReceiver将处理数据,并会更新的ProgressDialog。下面是实现ResultReceiver的(使它作为内部类的活动类):
private class DownReceiver extends ResultReceiver {
public DownloadReceiver(Handler handler) {
super(handler);
}
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
super.onReceiveResult(resultCode, resultData);
if (resultCode == Const.NEW_PROGRESS) {
int progress = resultData.getInt("progress");
// pd variable represents your ProgressDialog
pd.setProgress(progress);
pd.setMessage(String.valueOf(progress) + "% downloaded sucessfully.");
}
}
}
downvote先生downvoter的原因?这工作,因为即时通讯在我的项目中使用它。 – Sajmon
OP在询问如何使用通知发布进度。这需要使用RemoteViews。是什么让你认为OP从一个活动启动IntentService?例如,我从AlarmManager或BroadcastReceiver创建的警报中触发一个警报。在任何情况下,ResultReceiver都不适合。 – Squonk
@Squonk你仔细阅读过问题吗? “是否可以**显示来自我的DownloadService **(这是扩展的IntentService)的** ProgressBar或ProgressDialog,**除了通知栏中显示的进度?” – Sajmon
你可以使用异步任务显示进度对话框,把你下载里面doinbackground(服务)和前执行show对话和后对话框取消对话。 –
@ShashankAgarwal我应该澄清一点,我希望我的下载服务也可用于其他活动。您提出的方式可以从其他活动下载服务吗? – venta7
**“是否可以显示...除了通知栏中显示的进度?”** - 是的,这是可能的。 **“你能写一个示例代码或伪代码,我怎么能做到这一点?”**不。我们不在Stackoverflow上为人们编写代码。我建议你看一下android开发者网站和/或搜索网络的例子。那里有很多东西。 – Squonk