2016-03-04 57 views
1

的時間間隔後,所述AlarmManager.setInexactRepeating()函數使用API​​小於API 19才能正常運行,我用於API的19個向上AlarmManager.setExact()函數和使用廣播接收機執行所需任務,然後再次調用鬧鐘功能,使其成爲重複鬧鐘。警報有效,但不符合預期的重複間隔。我做了一些研究,看看其他人做了什麼,我在智慧的結尾。AlarmManager執行的任務分鐘的間隔,而不是給定的一天

我創建了一個類來處理報警,如下所示:

public class AlarmStart { 

public AlarmStart() { 
} 

public void startAlarm(Context context) { 
    // Start service 
    if(Build.VERSION.SDK_INT < 19) { 
     Intent service = new Intent(context, MyService.class); 
     PendingIntent pendingIntent = PendingIntent.getService(context, 0, service, 0); 

     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       AlarmManager.INTERVAL_DAY, AlarmManager.INTERVAL_DAY, 
       pendingIntent); 
    } 
    else { 
     Intent intent = new Intent(context, MyBroadcastReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, 1000 * 60 * 60 * 24, pendingIntent); 
    } 

    // Enable receiver when device boots 
    ComponentName receiver = new ComponentName(context, BootReceiver.class); 
    PackageManager pm = context.getPackageManager(); 

    pm.setComponentEnabledSetting(receiver, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
      PackageManager.DONT_KILL_APP); 
} 

下面是在廣播接收器類,這使得在間隔要執行的服務的呼叫(其工作良好)的代碼,然後讓另一個調用startAlarm()函數:

public class MyBroadcastReceiver extends BroadcastReceiver { 

AlarmStart alarmStart = new AlarmStart(); 

public MyBroadcastReceiver() { 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    // Start service 
    Intent service = new Intent(context, MyService.class); 
    context.startService(service); 

    //Schedule next alarm 
    alarmStart.startAlarm(context); 
} 

在AndroidManifest.xml中,我設置了啓用和出口的廣播接收器的屬性爲true。

請能有人告訴我,我可能是做錯了?

回答

0

你搞砸了啓動時間。

更換

alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, 1000 * 60 * 60 * 24, pendingIntent); 

alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+(1000 * 60 * 60 * 24), pendingIntent); 

同樣的事情

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, AlarmManager.INTERVAL_DAY, AlarmManager.INTERVAL_DAY, pendingIntent); 

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+AlarmManager.INTERVAL_DAY, AlarmManager.INTERVAL_DAY, pendingIntent); 
更換

問題是您已經在錯誤的時間發起了警報。

+0

我也改變爲API層級setInexactRepeating()以只需設置()<19和所使用的廣播接收機和它得到了準確的。非常感謝你 –

相關問題