2013-03-27 63 views
0

我正在嘗試編寫一個Android小部件,它將自身更新爲文本[]中的不同消息。它輸出第一條消息「Test1」,但不會繼續。它會在我選擇一個放置在主屏幕上的新小部件時進行更新。它不會在logcat中吐出任何東西。它應該每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文本? – 2013-03-27 18:43:57

+0

我想每5秒更新一次以查看學習結果。 – awonderer 2013-03-27 18:52:27

回答

0

您無法每5秒更新一次小部件(至少不是這樣做) android:updatePeriodMillis僅限於30分鐘。

+0

粗略地說,我需要一個服務嗎? 'updatePeriodMillis'只是隱含的,不應該爲我自動執行onUpdate方法? – awonderer 2013-03-27 18:50:48

+0

updatePeriodMillis被限制爲30000毫秒(30分鐘)。您可以使用Alarmmanager安排更頻繁的更新。 – Ahmad 2013-03-27 18:53:05

+0

這說得很清楚。謝謝。 – awonderer 2013-03-27 18:58:41

1

今天我有類似的問題。它已經走過了一段black magic ritual

不知道下一次出現問題時是什麼以及該怎麼做。