Android-виджет с изменяющимся текстом - PullRequest
1 голос
/ 17 августа 2010

Я пытаюсь создать невероятно простой виджет, который изменяет текст, отображаемый каждые 5 секунд или около того. Однако у меня были большие головные боли, пытаясь заставить это работать. Очевидно, я не могу использовать вызов onUpdate, так как это минимум каждые 30 минут. В настоящее время мое решение использует Timer в расширенном классе Service, который так же уродлив, как и ад, и имеет тенденцию бежать как собака через некоторое время. Есть ли «чистый» способ сделать это, т.е. способом, который не требует виджета, службы обновлений, таймеров и т. д.

Я не прошу полного решения, просто указатель на то, как сделать это эффективным образом.

Спасибо, John

Ответы [ 2 ]

1 голос
/ 17 августа 2010

Используйте CountdownTimer:

 new CountdownTimer(5000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();
0 голосов
/ 13 мая 2011

Я добавил следующий процесс, который вызывается в вашем провайдере виджетов .... примерно так ...

, чтобы виджет обновлялся в течение следующих 24 часов каждые 30 секунд ....

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

 @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {

        try {
            final int N = appWidgetIds.length;
            for (int i=0; i<N; i++) {
                int appWidgetId = appWidgetIds[i];
                updateAppWidget(context, appWidgetManager, appWidgetId);


            }

        updateWidgetView(context, context.getSharedPreferences(
                    MainActivity.APP_PREFERENCES,
                        Context.MODE_PRIVATE));
        } catch (Exception e) {
                e.printStackTrace();
        }





    }




 public static void updateAppWidget(final Context context, final AppWidgetManager appWidgetManager,
              final int appWidgetId){

        Context c;
         c = context;
             try {

                 new CountDownTimer(86400, 30000) {

                     public void onTick(long millisUntilFinished) {
                    //do proc every 30sec here. pull prefs and show them                            
                         SharedPreferences preferencesaa = PreferenceManager.getDefaultSharedPreferences(context); 

                          String drinkmsg = preferencesaa.getString("WIDGETTEXT", "You need to drink water.");

                         RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget);
                         updateViews.setTextViewText(R.id.widget_text_threat, drinkmsg.toString());

                         appWidgetManager.updateAppWidget(appWidgetId, updateViews); 
                     }

                     public void onFinish() {

                     }
                  }.start();



            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            }

Первое приложение, которое я собираюсь выпустить.8 чашек в день ™

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...