2013-07-10 54 views
1

我有一個簡單的文本視圖,我試圖用AlarmManager更新每一秒。 Log.d(「test」,「hello1」)在運行應用程序時出現在我的LogCat中,但Log.d(「test」,「service」)沒有顯示出來,所以它看起來程序不是甚至到達我的MyService類。AlarmManager爲什麼不更新我的小部件?

我將不勝感激任何幫助。

謝謝。

這裏是我的AppWidgetProvider類:

public class NetworkSpeedWidget extends AppWidgetProvider { 

private PendingIntent service = null; 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 
    Log.d("test", "hello"); 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 
    final AlarmManager m = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    final Intent i = new Intent(context, MyService.class); 
    if (service == null) 
    { 
     service = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT); 
    } 
    Log.d("test", "hello1"); 
    m.setRepeating(AlarmManager.RTC, System.currentTimeMillis(),1000,service); 

} 

}

這裏是我的MyService類:

public class MyService extends Service{ 
@Override 
public void onCreate() 
{ 
    Log.d("test", "service"); 
    super.onCreate(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    buildUpdate(); 

    return super.onStartCommand(intent, flags, startId); 
} 

private void buildUpdate() 
{ 


    MainActivity object = new MainActivity(); 
    String objectString = object.getMegaBitsPerSecondString(); 

    AppWidgetManager manager = AppWidgetManager.getInstance(this); 
    ComponentName thisWidget = new ComponentName(this, NetworkSpeedWidget.class); 
    int[]ids = manager.getAppWidgetIds(thisWidget); 
    final int N = ids.length; 
    for (int i = 0; i < N; i++){ 
     int awID = ids[i]; 
     RemoteViews v = new RemoteViews(getPackageName(), R.layout.widget); 
     v.setTextViewText(R.id.widgetTextView,objectString);    
     manager.updateAppWidget(awID, v); 
    } 
} 

@Override 
public IBinder onBind(Intent intent) 
{ 
    return null; 
} 
} 
+1

您應該發送PendingIntent:http://developer.android.com/reference/android/app/PendingIntent.html#send(int)。你有沒有在你的清單中宣佈這項服務? – jul

+0

就是這樣!我沒有在我的Manifest中聲明這項服務。非常感謝。我不認爲PendingIntent會起作用,因爲我沒有處理任何處理程序。我很驚訝,Eclipse沒有給我一個警告或一個錯誤,我的服務沒有宣佈。 – Richard

回答

2

所有我的代碼是正確的,我只需要聲明它在我的清單。

我只是簡單地添加以下行:

<service android:enabled="true" android:name=".MyService" /> 

感謝您七月的幫助。