Главная   →   Блог   →   Android Widgets - Как сделать обновление данных

Android Widgets - Как сделать обновление данных

Андроид виджеты – это небольшие приложения, которые могут быть встроены как на главном, так и на заблокированном экране и позволяют периодически обновляють данные. Эти элементы работают как часть процесса основного приложения, но не запускаются в явном виде.

Виджеты используют RemoteViews object для создания пользовательских интерфейсов. Класс этих объектов описывает иерархию представления экранов, которые должны отображаться в другом процессе. RemoteViews накладывает некоторые ограничения при использовании представления экранов  и макетов. Вы не можете использовать собственные вью-элементы в виджетах. Со списком поддерживаемых макетов, можно ознакомиться здесь: AppWidgets on Google Developer Portal

Виджеты могут быть любого размера, однако Google рекомендует рассчитывать их по формуле: размер виджетов ((Количество колонок/строки)*74) 2.

В первую очередь при разработке виджетов нужно реализовать макет интерфейса. Во-вторых, необходимо создать класс, который будет расширять класс AppWidgetProvider, для реализации жизненного цикла виджетов:

public class MyWidgetProvider extends AppWidgetProvider {
 public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
  final int N = appWidgetIds.length;
   for (int i=0; i<N; i++) {
    int appWidgetId = appWidgetIds[i];
    Intent intent = new Intent(context, ExampleActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
    views.setOnClickPendingIntent(R.id.image, pendingIntent);
    appWidgetManager.updateAppWidget(appWidgetId, views);
   }
 }
}

onUpdate метод будет вызываться в зависимости от установленного периода обновления. Это необходимо для выполнения действий, которые изменяют состояние виджета. Также в файле манифеста вашего приложения, необходимо определить виджет, для этого нужно добавить Receiver и IntentFilter, например:

<?xml version="1.0" encoding="utf­8"?>
<appwidget­provider xmlns:android="http://schemas.android.com/apk/res/android"
 android:initialLayout="@layout/widget_loading"android:configure=
"com.example.app.widget.WidgetConfigureActivity"
  android:minHeight="144dp"
  android:minResizeHeight="144dp"
  android:minResizeWidth="250dp"
  android:minWidth="250dp"
  android:previewImage="@drawable/ic_launcher"
  android:resizeMode="vertical|horizontal"
  android:updatePeriodMillis="86400000"
  android:widgetCategory="keyguard|home_screen" />

Минимальный период обновления виджета вашего мобильного приложения Google рекомендует устанавливать не чаще, чем один раз в час, так как частое обновление приведет к быстрой разрядке батареи. Но если вам необходимо обновлять данные чаще, то можно использовать AlarmManager в реализации класса вашего виджета. При этом необходимо установить значение updatePeriodMillis равным «0» в xml файле конфигурации виджета.

private void startRepeating(Context context) {
 final AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
  Calendar calendar = Calendar.getInstance();
  alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), UPDATE_PERIOD, serviceIntent);
}

private void cancelRepeating(Context context) {
  final AlarmManager alarmManager = (AlarmManager)
  context.getSystemService(Context.ALARM_SERVICE);
  if (serviceIntent != null) {
   alarmManager.cancel(serviceIntent);
  }
}

Когда используем AlarmManager, обновление логики виджета должно происходить в Service и/или IntentService.

public class UpdateWidgetService extends IntentService {
  private AppWidgetManager appWidgetManager;
  private RemoteViews remoteViews;
  public UpdateWidgetService() {
   super("UpdateWidgetService");
  }

  @Override
  protected void onHandleIntent(Intent intent) {
   appWidgetManager = AppWidgetManager.getInstance(this.getApplicationContext());
   int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS)
   for (int widgetId : allWidgetIds) {
    // TODO: refresh logic.
   }
  }
}

Android Виджеты – это отличный способ демонстрации гибких настроек, которые позволяют сделать главный экран функциональным и учесть индивидуальные потребности каждого пользователя.

Будем ждать ваших комментариев, спасибо!

comments powered by Disqus
ЧИТАЙТЕ ТАКЖЕ...
Cf68cdaaf75f9cd1417267c6b1cafb3813c488a1 Augmented reality - дополненная реальность
Дополненная реальность (augmented reality) — технология, которая заключается в получении изображения с камеры с дальнейшим его распознаванием и наложением изображений.
754d17aa02f8c56a0e0b671d45bf2455f6177062 Agile (Scrum) методология
Scrum – это распространенная Agile методология, которая используется при разработке проектов
1a1b621bfd24aba09a56bb25cf18719ad46ef190 Мобильные приложения новостных порталов
Количество пользователей Интернета увеличивается за счет увеличения количества пользователей смартфонов и планшетов. Это означает, что мобильные приложения новостных порталов стремительно набирают обороты, соответственно и повышается и спрос на разработку
D63ac21dfd17c4acc93d52d9bdc72fea10e84edd Геолокация в разработке приложений
Сервисы геолокации используются многими веб-сайтами, мобильными приложениями, операторами мобильной связи и т.д.