警报就不会被召唤

时间:2014-08-20 07:54:51

标签: android service alarmmanager

我正在通过服务ScheduleAdvanceBookingService拨打电话,在预定时间拨打另一项服务SendRequestAdvanceBookingService

清单文件

    <service
        android:name=".ScheduleAdvanceBookingService"
        android:enabled="true"
        android:label="@string/app_name" />
    <service
        android:name=".SendRequestAdvanceBookingService"
        android:enabled="true"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.NOTIFY" />
        </intent-filter>
    </service>

我的通话代码有

public class ScheduleAdvanceBookingService extends IntentService {

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);
    return START_STICKY;
}

@Override
protected void onHandleIntent(Intent intent) {
    Intent newIntent = new Intent(this,
            SendRequestAdvanceBookingService.class);
    Date startTime = (Date) intent.getSerializableExtra("startTime");
    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    newIntent.setAction("android.intent.action.NOTIFY");

    autoBookingAlarm = (AlarmManager) this
            .getSystemService(Context.ALARM_SERVICE);
    autoBookingPendingIntent = PendingIntent.getService(this, 0, newIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);
    Calendar cal = Calendar.getInstance();
    cal.setTime(startTime);
    long alarmCallTime = cal.getTimeInMillis();
    autoBookingAlarm.set(AlarmManager.RTC_WAKEUP, alarmCallTime,
            autoBookingPendingIntent);
    Log.d("Taxeeta", "Scheduled a Auto Advance Booking @"
            + cal.getTime().toLocaleString());

我未来的警报服务

public class SendRequestAdvanceBookingService extends Service {


public SendRequestAdvanceBookingService() {
    super();
    handler = new Handler();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d("Taxeeta", "Start - SEND REQUEST.");

调试语句以检查日期

  

08-20 13:40:14:008:D / Taxeeta(31578):预定自动提前预订@ 2014年8月20日13:41:37

我在这里缺少什么?

我试过了

  1. 删除intent-fiter和addAction,仍然不会触发
  2. 直接使用startTime而不是cal.setTime(startTime) cal.getTimeInMilli()

1 个答案:

答案 0 :(得分:0)

修复很简单,没有任何记录。

我跑了./adb shell dumpsys alarm > ~/dump.txt并在我的设备上搜索了我的闹钟。我在我的应用程序设备上发现了许多未决警报。这促使我清理,并通过设置 - >应用程序 - &gt; MyApp-&gt;强制关闭强制关闭,清除警报。

然后我运行了我的应用程序,它运行了。仅仅过了一段时间,我意识到之前没有运行应用程序的手机运行良好,这暗示我再次进行清理。

所以我需要做的就是

autoBookingAlarm.cancle(autoBookingPendingIntent);

之前的

autoBookingAlarm.set(AlarmManager.RTC_WAKEUP, alarmCallTime,
        autoBookingPendingIntent);

这将在安排新警报之前取消先前的警报。