AlarmManager 不是来自 MainActivity

AlarmManager not from MainActivity

当我在 MainActivity 中创建 AlarmManager 时,它可以正常工作。另一个activity在指定时间开始:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this, AlarmActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, iterator, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, key, pendingIntent);

但如果我不是从 MainActivity 执行此操作,而是从 AlarmActivity class 本身执行此操作,则在到达预定时间后,什么也不会发生。

Intent intent = new Intent(**this**, AlarmActivity.class);

PendingIntent pendingIntent = PendingIntent.getActivity(**this**, ...);

问题很可能出现在上下文中,但如果意图不是从 MainActivity 创建的,上下文应该是什么? MainActivity 可能无法创建,因为 Alarm Activity 可以在不启动主应用程序的情况下 运行。我尝试使用 thisAlarm Activity.this,以及 getApplicationContext()

更新
我在 alarmActivity 上有一个推迟按钮。当我按下它时,警报正在更新并且 activity 正在关闭。

public void hold(View view)
{
    long hold = 0;
    long currentTime = new Date().getTime();

    if (spinner.getSelectedItemPosition() == 0)
        //hold = 5 * 60 * 1000;
        hold = 5000; //for test
    else if (spinner.getSelectedItemPosition() == 1)
        hold = 10 * 60 * 1000;
    else if (spinner.getSelectedItemPosition() == 2)
        hold = 15 * 60 * 1000;
    else if (spinner.getSelectedItemPosition() == 3)
        hold = 30 * 60 * 1000;
    else if (spinner.getSelectedItemPosition() == 4)
        hold = 60 * 60 * 1000;

    currentTime += hold;

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    Intent intent = new Intent(this, AlarmActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.set(AlarmManager.RTC_WAKEUP, currentTime, pendingIntent);

    this.finish();
}

首先在您的清单中,像这样注册一个接收者:

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

现在创建一个 class 来扩展广播接收器,如下所示:

public class AlarmReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

    Print("intent "+intent.getAction());
    Log.d("Alarm ", "Alarm triggered!");



    Intent activityIntent = new Intent(context, ActivityToOpen.class).putExtra("byAlarm","yes");
    context.startActivity(activityIntent); //start



}

}

这里是报警代码:

AlarmManager am = (AlarmManager)     DialerService.this.getSystemService(Context.ALARM_SERVICE);
    Print("inside scheduleAlarm  "+interval);
    logger.writeLog("inside schedule alarm and interval is "+interval);
    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+oneHour*interval, getPendingIntent(yourContext,AlarmID));



 private PendingIntent getPendingIntent(Context context, int id) {
    Intent intent =  new Intent(context, AlarmReciever.class)
            .putExtra("alarmId", id);
    return PendingIntent.getBroadcast(context, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}

在您的未决意图中,您必须提供 AlarmReceiver class 而不是您的 activity。