2015-03-16 2 views
0

Я хочу обновить свой виджет, но он просто не работает! Я сделал это так, чтобы обновление происходило в определенное время - через несколько минут после запуска приложения, но виджет не обновляется. Я знаю это, потому что устанавливаю ярлык с System.currentTimeMillis. Когда приложение обновляется, этот ярлык должен иметь новые значения. Я сделал все, как сказал мне документ Android AlarmManager.Не удается обновить виджет Android с помощью AlarmManager и календаря

views.setTextViewText(R.id.todayDate,System.currentTimeMillis()+""); 

Так вот что я сделал, в обоих OnReceive и OnUpdate из

public class CalendarWidget extends AppWidgetProvider 

Больше кодекса

Calendar todayMidnight = Calendar.getInstance(); 
todayMidnight.setTimeInMillis(System.currentTimeMillis()); 
todayMidnight.add(Calendar.DATE, 0); 
todayMidnight.set(Calendar.HOUR_OF_DAY, 23); 
todayMidnight.set(Calendar.MINUTE, 2); 
todayMidnight.set(Calendar.SECOND, 0); 

AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent (context, CalendarWidget.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); 

alarm.setRepeating(AlarmManager.RTC, todayMidnight.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent); 

...

views.setTextViewText(R.id.todayDate,System.currentTimeMillis()+""); 

В Manifest

<receiver 
      android:name="com.standardSPenPlannerInhoHwang.CalendarWidget" 
      android:theme="@android:style/Theme.Translucent" 
      android:process=":remote" 
      android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
       <action android:name="android.appwidget.action.APPWIDGET_ENABLED" /> 
       <action android:name="android.intent.action.TIMEZONE_CHANGED" /> 
       <action android:name="android.intent.action.TIME_SET" /> 
       <action android:name="android.intent.action.DATE_CHANGED" /> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 

      <meta-data 
       android:name="android.appwidget.provider" 
       android:resource="@layout/calendar_widget2" /> 
     </receiver> 

Но приложение не обновляется в 11:02 вечера !! Это должно работать, не так ли? (Просто заметьте, что меня обновляет виджет из моих действий, работает нормально. Это просто диспетчер аварийных сообщений, который не обновляет виджет!)

ответ

1

is CalendarWidget ваш класс приемника?
вам нужен класс приемник
public class AlarmReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { //Alarm received,update your widget } }

и в своей деятельности:
Intent alarmIntent=new Intent(yourActivity.this,AlarmReceiver.class); PendingIntent pi=PendingIntent.getActivity(context,ID,intent,0); AlarmManager manager =(AlarmManager)getSystemService(Context.ALARM_SERVICE); manager.set(AlarmManager.RTC, ... ,pendingIntent);

+0

Да, я понял это с этим руководством http://code4reference.com/2012/07/android-homescreen- widget-with-alarmmanager /, но то, что вы сказали, правильно. Этот учебник идеален и работает очень хорошо. – coolcool1994

+0

В WidgetProvider вам нужно, чтобы будильник вызывал ваш BroadcastReceiver. И в BroadcastReceiver вам нужно вызвать AppWidgetProvider для обновления виджета. – coolcool1994

+0

Также странно, что вам нужны два метода onReceive. Один onReceive должен быть в вашем классе BroadcastReceiver - который запускается с сигналом тревоги. OnReceive в вашем приложении appwidgetprovider запускается, когда вы вызываете ваш ожидающий ввод кнопки, нажатой в вашем виджете. – coolcool1994

Смежные вопросы