从 IntentService 显示进度栏或对话框以获取下载进度[关闭]

2024-03-06

我有一个带有“下载”按钮的活动,该按钮会启动 IntentService 中实现的 DownloadManager。一切工作正常,我的问题是:

除了通知栏中显示的进度之外,是否可以从我的 DownloadService(扩展的 IntentService)显示 ProgressBar 或 ProgressDialog?

你能写一个示例代码或伪代码我该怎么做吗?谢谢


是否可以显示我的 ProgressBar 或 ProgressDialog DownloadService(是IntentService的扩展),除了进度 显示在通知栏中?

你能写一个示例代码或伪代码我该怎么做吗?感谢 你

您可以使用 ResultReceiver 来实现您的目标。 ResultReceiver 实现了 Parcelable,因此您可以将其传递给 IntentService,如下所示:

Intent i = new Intent(this, DownloadService.class);
i.putExtra("receiver", new DownReceiver(new Handler()));
<context>.startService(i);

然后在你的onHandlerIntent()您所需要的只是获取传递给 Intent 的接收器并将当前进度发送到 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);
}

And 结果接收者 将处理数据并进行更新 进度对话框。这是 ResultReceiver 的实现(将其作为 Activity 类的内部类):

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.");
      }
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 IntentService 显示进度栏或对话框以获取下载进度[关闭] 的相关文章

随机推荐