2014-02-24 52 views
2

我有一个在后台运行的服务。我正在使用报警管理器启动此服务。它工作正常,但是当我在设备或模拟器中更改系统时钟时,警报管理器停止。更改系统时钟时停止报警管理器

public void startAzanService() { 
Calendar cal = Calendar.getInstance(); 
Intent intent = new Intent(this, CheckAzan.class); 
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0); 
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    //repeat the action every 5 secionde 
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5000, pintent); 
} 
+0

我害怕,我不得不说,逻辑看起来不好。 – Farhan

回答

2

您可以通过收听时间的变化Broadcast克服这个问题。执行以下操作: -

1)在你创建BroadcastReceiverManifest文件: -

<receiver android:name=".TimeChangeReceiver"> 
     <intent-filter > 
      <action android:name="android.intent.action.TIME_SET"/> 
     </intent-filter> 
</receiver> 

2)创建接收机类: -

public class TimeChangeReceiver extends BroadcastReceiver{ 

@Override 
public void onReceive(final Context arg0, Intent arg1) { 
    //Call your Alarm setting code 
    Calendar cal = Calendar.getInstance(); 
    Intent intent = new Intent(this, CheckAzan.class); 
    PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0); 
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    //repeat the action every 5 secionde 
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5000, pintent); 
    } 
} 

*假设你不要您的代码没有任何问题:)

This link也是一个很好的教程BroadcastReceiver

+1

它就像魔术一样工作 Abd El-Rahman – user3346245