2012-06-07 3 views
0

У меня возникла потребность в разработке службы обновлений для приложения, эта служба обновления вытащит данные из официантов и должна обновить графический интерфейс, если есть новые обновления. Первая часть - прямолинейная, а для второй - лучший подход?Android намерения и услуги

Я думаю о том, что у вас есть пользовательский приемник намерения, который будет зарегистрирован в приложении, и он скажет, что действия будут загружать контент снова. Более того, если приложение закрыто, мне нужно показать пользовательский диалог из активности, рассказывающий об обновлениях.

Мне нужны ваши отзывы, и если у какого-либо органа есть подобный образец проекта, пожалуйста, поделитесь им, чтобы посмотреть детали реализации.

Спасибо.

ответ

0

эта служба обновления будет тянуть/Загрузить данные из хорошо осведомленного

Скачать с службы

большим вопросом здесь: как мне обновить мою деятельность от службы ?. В следующем примере мы собираемся использовать два класса, о которых вы, возможно, не знаете: ResultReceiver и IntentService. ResultReceiver - это тот, который позволит нам обновить наш поток из службы; IntentService - это подкласс Сервиса, который генерирует поток для выполнения фоновой работы (вы должны знать, что Служба работает на самом деле в том же потоке вашего приложения, когда вы расширяете Сервис, вы должны вручную создавать новые потоки для выполнения операций блокировки ЦП) ,

Скачать Сервис может выглядеть следующим образом:

public class DownloadService extends IntentService { 
    public static final int UPDATE_PROGRESS = 8344; 
    public DownloadService() { 
     super("DownloadService"); 
    } 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     String urlToDownload = intent.getStringExtra("url"); 
     ResultReceiver receiver = (ResultReceiver) intent.getParcelableExtra("receiver"); 
     try { 
      URL url = new URL(urlToDownload); 
      URLConnection connection = url.openConnection(); 
      connection.connect(); 
      // this will be useful so that you can show a typical 0-100% progress bar 
      int fileLength = connection.getContentLength(); 

      // download the file 
      InputStream input = new BufferedInputStream(url.openStream()); 
      OutputStream output = new FileOutputStream("/sdcard/BarcodeScanner-debug.apk"); 

      byte data[] = new byte[1024]; 
      long total = 0; 
      int count; 
      while ((count = input.read(data)) != -1) { 
       total += count; 
       // publishing the progress.... 
       Bundle resultData = new Bundle(); 
       resultData.putInt("progress" ,(int) (total * 100/fileLength)); 
       receiver.send(UPDATE_PROGRESS, resultData); 
       output.write(data, 0, count); 
      } 

      output.flush(); 
      output.close(); 
      input.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     Bundle resultData = new Bundle(); 
     resultData.putInt("progress" ,100); 
     receiver.send(UPDATE_PROGRESS, resultData); 
    } 
} 

Добавить услугу в манифесте:

<service android:name=".DownloadService"/> 

она должна обновить GUI, если есть новые обновления

Действие будет выглядеть так:

// инициализировать прогресс диалоговое как в первом примере

// это как огонь загрузчик

mProgressDialog.show(); 
Intent intent = new Intent(this, DownloadService.class); 
intent.putExtra("url", "url of the file to download"); 
intent.putExtra("receiver", new DownloadReceiver(new Handler())); 
startService(intent); 

Здесь есть были ResultReceiver приходит играть:

private class DownloadReceiver extends ResultReceiver{ 
    public DownloadReceiver(Handler handler) { 
     super(handler); 
    } 

    @Override 
    protected void onReceiveResult(int resultCode, Bundle resultData) { 
     super.onReceiveResult(resultCode, resultData); 
     if (resultCode == DownloadService.UPDATE_PROGRESS) { 
      int progress = resultData.getInt("progress"); 
      mProgressDialog.setProgress(progress); 
      if (progress == 100) { 
       mProgressDialog.dismiss(); 
      } 
     } 
    } 
} 
+0

для будущего добавить ссылку на тему не скопированный код из существующей темы. – Sajmon

+0

Thnx !! будет иметь в виду –

+0

thanx дорогой, но он отходит от того, что я ищу, служба, в которой я нуждаюсь, основана на времени, чтобы вытащить данные каждые x минут. но большое спасибо за помощь. – Nullity

0

A возможным способом является синхронизация ваших данных с ContentProvider и когда начнется ваша деятельность, зарегистрируйтесь, чтобы наблюдать за изменениями этого провайдера через

ContentResolver.registerContentObserver() 

Как я помню, приложение jumpnote использует это. link

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