2012-03-16 74 views
6

我一直在關注各種小部件教程如this onethis one的OnUpdate從來不叫 - Android小工具

我試圖適應他們的代碼,以我的目的,我曾嘗試直線上升的複製粘貼。 看來不管我做什麼,我的小部件都不會更新。當它被放置在主屏幕上時,文本保持爲其創建的靜態文本。 我需要這個應用程序做的是更新4將包含在佈局中的TextViews。

下面的代碼大部分都是從一個教程中複製的。我試着調試onUpdate方法,但是中斷點似乎從未被擊中。

任何幫助將非常感激。

編輯:我恢復到這個小部件的一個簡單得多的版本,我在之前嘗試的努力,並用簡單的小部件的代碼替換下面的代碼。我將CommonsWare提出的更改提交給我的清單。不幸的是問題依然存在

我主要的.java文件看起來像這樣:

public class NetStatWidget extends AppWidgetProvider 
{ 

public void onUpdate(Context context, AppWidgetManager manager, int[] appWidgetIds) 
{ 
    ComponentName thisWidget = new ComponentName(context, NetStatWidget.class); 
    int[] widgetId = manager.getAppWidgetIds(thisWidget); 

    RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.appwidget); 
    remoteView.setTextViewText(R.id.textView0, "Hello"); 
    manager.updateAppWidget(widgetId, remoteView); 
} 

} 

我的清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="net.stat" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="10" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 


      <receiver android:name="NetStatWidget" > 
       <intent-filter> 
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
       </intent-filter> 
       <meta-data 
        android:name="android.appwidget.provider" 
        android:resource="@xml/providerinfo" /> 
      </receiver> 

    </application> 

</manifest> 

我的微件提供者的信息:

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

回答

7

你的清單是錯誤。你聲稱你有一個network.widget.AppWidgetProvider班,而AFAIK,你沒有。你有一個奇怪的network.widget.NetworkWidgetActivity類。您需要在<receiver>元素中使用

另外:

  • 更換this.getApplicationContext()getApplicationContext()this

  • 除非你打算在服務做得更嚴肅的工作(數據庫I/O,網絡I/O等)考慮只是把所有的邏輯移動到onUpdate()並擺脫服務,因爲它不是真的在這裏買你很多(如果你去保持服務,切換到IntentService並擺脫stopSelf()因爲這是爲您處理)

  • 雖然你所要求的10秒更新,最小有效updatePeriodMillis爲30分鐘 - 只要記住這一點,當你在調試

  • int[] widgetId似乎是未使用在NetworkWidgetActivity

  • onStart() in Service已被棄用一兩年;使用onStartCommand()而不是

+0

我改變我的清單,根據您的建議,我仍然有同樣的問題...我回到了我剛開始努力時嘗試的一個更簡單的小部件,做出了同樣的改變,它也遇到了同樣的問題。我編輯上面的代碼反映了更簡單的代碼。你看到同樣的問題嗎? – Jodron 2012-03-16 22:16:34

+0

@Jodron:不,你在那裏應該在Android 3.0及更低版本上工作。 Android 3.1及以上版本,你需要一個活動去與你的應用程序小部件 - 你的應用程序小部件將不會收到廣播,直到用戶運行該活動。該目錄包含另外兩個應用程序小部件示例,這兩個示例都適用:https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget – CommonsWare 2012-03-16 22:19:45

+0

這很奇怪。我在2.3上運行它,它仍然不會更新文本。我錯誤地認爲,一旦小部件被放置「textView0」應該讀「你好」? 感謝這些例子,我仔細看看那些,看看我是否搞不清楚。我想我可能會在我的腦海中,應該只是一個普通的應用程序。 – Jodron 2012-03-16 22:30:29