Главная   →   Блог   →   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 Виджеты – это отличный способ демонстрации гибких настроек, которые позволяют сделать главный экран функциональным и учесть индивидуальные потребности каждого пользователя.

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

Next Posts
415200389cf88459c257feaea79ce88fde6ddf40 Мобильные приложения в маркетинге
В современном ритме жизни все больше пользователей подключаются к сети через телефоны, поэтому актуальным становится мобильный маркетинг, о котором сегодня и пойдет речь в нашей статье.
00bed15b93a7414d8325a4f9dd5becbe9c953ef4 Разработка мобильных приложений для игорного бизнеса
Сквозь века казино остаются крайне популярными. Тысячи людей ездят в разные уголки мира, чтоб попытать удачу. Но время не стоит на месте и теперь любая игра для казино может быть в вашем смартфоне. Многие онлайн казино сейчас предлагают мобильные версии а
F84384eb5a0317b767c898cced27c9286d989f56 Статья: Agilie - Marketing presentation
Mobile and adaptive web development, design prototyping and QA services presentation by Agilie