Android: Alarm not firing to update Widget from Service

南楼画角 提交于 2019-12-11 14:04:34

问题


I have created a widget to display the current date which refreshes every 5-10 seconds (Will be increasing the duration later). Created an alarm in the onUpdate method to create the intent for the service. Created an onReceive method extending broadcast receiver) to start the service which in turn updates the widget with the date. When I invoke the widget onReceive fires initially and displays the date. After that the alarm doesn't fire.

1) Am I right in including an onReceive method and calling startservice? 2) How do I know the create alarm is active and not firing? 3) What is wrong with the following code?

Please help.

Thanks, Sam

  public class WorldCupScores extends AppWidgetProvider {
    public static String TAG = "myActivity";

    @Override
      public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "receiveeeeeeeeeeee");
        Toast.makeText(context, "Receiver", Toast.LENGTH_LONG).show();
        context.startService(new Intent(context, UpdateService.class));
          super.onReceive(context, intent);
      }    

      @Override
      public void onUpdate(Context context, AppWidgetManager appWidgetManager,
          int[] appWidgetIds) {
          // To prevent any ANR timeouts, we perform the update in a service
          //context.startService(new Intent(context, UpdateService.class));
          AlarmManager alarmManager;
          Log.d(TAG, "before intenttttt");
          Intent intent = new Intent(context, UpdateService.class);
          Log.d(TAG, "afterrrr intenttttt");
          PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
                intent, 0);
          alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
          Calendar cal = Calendar.getInstance();
          cal.setTimeInMillis(System.currentTimeMillis());
          cal.add(Calendar.SECOND, 10);
          alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5*1000, pendingIntent);       
          Toast.makeText(context, "My alarm started", Toast.LENGTH_LONG).show();
          Log.d(TAG, "alarmmmmmmmm");
      }

      public static class UpdateService extends Service {
          @Override
          public void onStart(Intent intent, int startId) {

            Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
            Log.d(TAG, "Inside Serviceeeeeeeeeeeeeeeeeeeee");
            // Build the widget update for today
              //RemoteViews updateViews = buildUpdate(this);
            RemoteViews updateViews = new RemoteViews(this.getPackageName(),
                    R.layout.main);

            Date date = new Date();

            updateViews.setTextViewText(R.id.scores, "Current Time "
                    + date);

              // Push update for this widget to the home screen
              ComponentName thisWidget = new ComponentName(this, WorldCupScores.class);
              AppWidgetManager manager = AppWidgetManager.getInstance(this);
              manager.updateAppWidget(thisWidget, updateViews);
              super.onStart(intent, startId);
          }
          @Override
          public IBinder onBind(Intent intent) {
              // We don't need to bind to this service
              return null;
          }
      }
  }

回答1:


1) Am I right in including an onReceive method and calling startservice?

I wouldn't quite do it that way. In your current code, onUpdate() will never be called, because onReceive() never chains to the superclass.

2) How do I know the create alarm is active and not firing?

If it is not firing, it is not active. And, since onUpdate() is not being called, your alarm is never being scheduled.



来源:https://stackoverflow.com/questions/5369131/android-alarm-not-firing-to-update-widget-from-service

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!