2013-07-10 23 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" /> 

感谢您七月的帮助。