Country
    Главная   →   Блог   →   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 Мобильные приложения в маркетинге
    В современном ритме жизни все больше пользователей...
    00bed15b93a7414d8325a4f9dd5becbe9c953ef4 Разработка мобильных приложений для игорного бизнеса
    Сквозь века казино остаются крайне популярными. Тысячи...
    F84384eb5a0317b767c898cced27c9286d989f56 Статья: Agilie - Marketing presentation
    Mobile and adaptive web development, design prototyping...