Главная   →   Блог   →   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
Notice Our website uses cookies, which are necessary for its functioning and required to achieve the purposes illustrated in the privacy policy. By closing this banner you agree to the use of cookies.