Главная   →   Блог   →   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
5bcd5a139a6e0025e5f98156148a5fa17d6eda23 Mobile Applications in Mobile Advertising
Mobile apps for businesses are a great tool for any kind of business, and in our article we will have a look at such ways of promotion as mobile marketing and mobile advertising.
00bed15b93a7414d8325a4f9dd5becbe9c953ef4 Gambling and Slots Mobile Apps
Thanks to mobile gambling now any of casino game could be in your mobile device. Many online casinos offer mobile version of gambling today. Real money gambling apps give you the opportunity to play your favorite casino anywhere and anytime.
F84384eb5a0317b767c898cced27c9286d989f56 Agilie - Marketing Presentation
Mobile and adaptive web development, design prototyping and QA services presentation by Agilie