2015-11-25 91 views
0

我嘗試每天重複一次通知(對於調試,我將其設置爲每10秒一次)。但是,它僅在第一次發佈通知時纔會發生任何事情。AlarmManager不能正確重複

這裏就是報警設置代碼:

Intent myIntent = new Intent(ctx , NotifyService.class); 
AlarmManager alarmManager =(AlarmManager)ctx.getSystemService(ALARM_SERVICE); 
PendingIntent pendingIntent = PendingIntent.getService(ctx, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

Calendar calendar = Calendar.getInstance(); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), 1000 * 10, pendingIntent); 

和這裏的服務:

public class NotifyService extends Service { 
    public NotifyService() { 

    } 

    @Override 
    public void onCreate(){ 
     //Create and Emit the notification. 
    } 

我在getService(ctx, int, Intent, flags)嘗試了不同的標誌,使用setInexactRepeating和設置新的每次致電NotifyService後都會發出警報。

+0

嘗試改變setRepeating()來setInexactRepeating()爲API> = 19 – phongvan

回答

0

使用以下方法在一天內重複報警一次,並且您必須註冊廣播接收器而不是AlarmManager服務,以便您可以從接收器啓動服務,並且建議您。

找到official doc

 private final static String ACTION = "ACTION_ALARM"; 
    public static void setWakeUpAction(Context context, String hourSet, String minuteSet, String periodSet, int requestCode, String currentAction) { 
      try { 
       String mHour = hourSet; 
       String mMin = minuteSet; 
       String[] parsedFormat = null; 
       Calendar calendar = Calendar.getInstance(); 
       SimpleDateFormat displayFormat = new SimpleDateFormat("HH:mm"); 
       SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm a"); 
       Date date = parseFormat.parse(mHour + ":" + mMin + " " + periodSet); 
       parsedFormat = displayFormat.format(date).split(":"); 
       mHour = parsedFormat[0]; 
       mMin = parsedFormat[1]; 
       calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(mHour)); 
       calendar.set(Calendar.MINUTE, Integer.parseInt(mMin)); 
       calendar.set(Calendar.SECOND, 00); 
       Intent myIntent = new Intent(context, MyReceiver.class); 
       myIntent.putExtra(ACTION, currentAction); 
       myIntent.putExtra("Time", new String[]{mHour, mMin, periodSet}); 
       PendingIntent pendingIntent = PendingIntent.getBroadcast(context, requestCode, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
       AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
       alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 
         AlarmManager.INTERVAL_DAY, pendingIntent); 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 

     } 

的BroadcastReceiver

public class MyReceiver extends BroadcastReceiver { 

    private final String ACTION = "ACTION_ALARM"; 
    private String ACTION_ONE = "ALARM_REPEAT"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     try { 
      String action = intent.getStringExtra(ACTION); 
      new ShowToast(context, action); 
      if (action.length() > 1) { 
       if (action.equals(ACTION_ONE)) { 
        String time[] = intent.getStringArrayExtra("Time"); 
        startService(context, action); 
       } 
      } 
     } catch (Exception e) { 
     } 

    } 

    public void startService(Context context, String action) { 
     Intent service1 = new Intent(context, NotifyService.class); 
     service1.putExtra(ACTION, action); 
     context.startService(service1); 
    } 

} 

艙單

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

    <receiver android:name=".MyReceiver" /> 

用法

setWakeUpAction(context, "11", "00","AM","0", "ALARM_REPEAT"); 
0

BroadcastReceiver使用PendingIntent而不是Service,這是推薦的(和記錄的)做法。此外,如果您使用「喚醒」警報,則需要使用BroadcastReceiver,否則系統將無法保證其保持足夠長的時間,以便您的Service實際執行並接收Intent。有關詳細信息,請參閱此文章:http://po.st/7UpipA

0

嘗試此,

alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(context, AlarmReceiver.class); 
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

// setRepeating() lets you specify a precise custom interval--in this case, 
// 10 seconds. 
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
     1000 * 10, alarmIntent); 

參見:http://developer.android.com/training/scheduling/alarms.html