2013-11-28 2 views
3

У меня есть активность с кнопкой «загрузить», которая запускает DownloadManager, реализованный в IntentService. Все работает нормально, и мой вопрос:show ProgressBar или Dialog из IntentService для загрузки.

Можно ли отобразить ProgressBar или ProgressDialog из моего DownloadService (который расширен IntentService), за исключением прогресса, показанного на панели уведомлений?

Не могли бы вы написать пример кода или псевдокода, как я могу это сделать? Спасибо

+0

вы можете использовать задачу асинхронной для отображения диалога прогресса, положить скачать сервис внутри doinbackground() и в предварительном диалоге шоу и запись выполнения диалог отмены диалога. –

+0

@ShashankAgarwal Я должен уточнить, что хотел бы, чтобы мой сервис загрузки был доступен и для других видов деятельности. Как вы предлагаете, я могу получить доступ к сервису загрузки из какой-либо другой деятельности? – venta7

+0

** «Возможно ли отображение ... кроме прогресса, показанного на панели уведомлений?» ** - Да, это возможно. ** «Не могли бы вы написать пример кода или псевдокода, как я могу это сделать?» ** Нет. Мы не пишем код для людей здесь, в Stackoverflow. Я предлагаю вам взглянуть на сайт разработчиков Android и/или искать в Интернете примеры. Там много. – Squonk

ответ

21

Можно ли отобразить ProgressBar или ProgressDialog от моего (который Сервис загрузки удлиняется IntentService), за исключением прогресса отображаемых в строке уведомлений?

Не могли бы вы написать пример кода или псевдокода, как я могу это сделать? Thank Вы

Вы можете использовать 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

Причина сбитого мистера минора? Это работает, потому что я использую его в своем проекте. – Sajmon

+0

ОП задает вопрос о публикации прогресса с помощью уведомления. Для этого требуется использовать RemoteView. Что заставляет вас думать, что OP запускает IntentService из Activity? Например, я запускаю один из моих или из Alarm, созданного с помощью AlarmManager или из BroadcastReceiver. Ни в одном случае не было бы подходящим ResultReceiver. – Squonk

+1

@Squonk Вы внимательно прочитали вопрос? «Возможно ли ** отображать ProgressBar или ProgressDialog из моего DownloadService ** (который расширен IntentService) **, кроме ** прогресса, показанного на панели уведомлений?" – Sajmon

Смежные вопросы