2013-11-28 52 views
3

我有一个“下载”按钮的活动,启动IntentService中实施的DownloadManager。一切工作正常,我的问题是:显示进度条或对话框从一个IntentService下载进度

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

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

+0

你可以使用异步任务显示进度对话框,把你下载里面doinbackground(服务)和前执行show对话和后对话框取消对话。 –

+0

@ShashankAgarwal我应该澄清一点,我希望我的下载服务也可用于其他活动。您提出的方式可以从其他活动下载服务吗? – venta7

+0

**“是否可以显示...除了通知栏中显示的进度?”** - 是的,这是可能的。 **“你能写一个示例代码或伪代码,我怎么能做到这一点?”**不。我们不在Stackoverflow上为人们编写代码。我建议你看一下android开发者网站和/或搜索网络的例子。那里有很多东西。 – Squonk

回答

21

是否有可能从我的 下载服务(有效期延长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."); 
     } 
    } 
} 
+0

downvote先生downvoter的原因?这工作,因为即时通讯在我的项目中使用它。 – Sajmon

+0

OP在询问如何使用通知发布进度。这需要使用RemoteViews。是什么让你认为OP从一个活动启动IntentService?例如,我从AlarmManager或BroadcastReceiver创建的警报中触发一个警报。在任何情况下,ResultReceiver都不适合。 – Squonk

+1

@Squonk你仔细阅读过问题吗? “是否可以**显示来自我的DownloadService **(这是扩展的IntentService)的** ProgressBar或ProgressDialog,**除了通知栏中显示的进度?” – Sajmon