2013-03-27 4 views
0

Я пытаюсь написать виджет Android, который обновляется до разных сообщений в тексте []. Он выводит первое сообщение «Test1», но не продолжается. Он обновляется, когда я выбираю новый виджет для размещения на главном экране. В логарифме ничего не выплевывает. Предполагается обновить виджет каждые 5 секунд. Я выбрал 5 секунд только для целей тестирования.Android-виджет не обновляется

manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.messageswidget" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <receiver android:name="main.MessagesWidget" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data android:name="android.appwidget.provider" 
      android:resource="@xml/widgetinfo" /> 
    </receiver> 

</application> 

MessagesWidget.java

package main; 


import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.ComponentName; 
import android.content.Context; 
import android.util.Log; 
import android.widget.RemoteViews; 

import com.example.messageswidget.R; 

public class MessagesWidget extends AppWidgetProvider { 
    private static int n = 0; 
    String[] text = {"Test1", "More2", "Good3"}; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 
     Log.d("test", "good"); 
     // TODO Auto-generated method stub 
     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widgetlayout); 
     views.setTextViewText(R.id.msg, text[n]); 
     n = (n + 1) % text.length; 

     ComponentName cname = new ComponentName(context, MessagesWidget.class); 
     appWidgetManager.updateAppWidget(cname, views); 
    } 
} 

widgetlayout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

<TextView android:id="@+id/msg" 
    android:textIsSelectable="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</LinearLayout> 

widgetinfo.xml

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="72dip" 
    android:minHeight="72dip" 
    android:updatePeriodMillis="5000" > 

</appwidget-provider> 
+0

, когда вы хотите обновить текст TextView? –

+0

Я хотел сделать обновление каждые 5 секунд, чтобы увидеть результат для обучения. – awonderer

ответ

0

Вы не можете обновить виджеты каждые 5 секунд (не так, как вы делаете это, по крайней мере) android:updatePeriodMillis ограничено до 30 минут.

+0

Грубо говоря, нужна ли мне услуга? Является ли «updatePeriodMillis» единственным неявным и не должен автоматически выполнять метод onUpdate для меня? – awonderer

+0

updatePeriodMillis ограничен до 30000 мс (30 минут). Вы можете использовать Alarmmanager для планирования более частых обновлений. – Ahmad

+0

Это ясно. Спасибо. – awonderer

1

У меня была аналогичная проблема сегодня. Он прошел после своего рода black magic ritual.

Не знаю, что это было и что делать, когда проблема появляется в следующий раз.

Смежные вопросы