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
可以在不启动主应用程序的情况下 运行。我尝试使用 this
和 Alarm 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。
当我在 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
可以在不启动主应用程序的情况下 运行。我尝试使用 this
和 Alarm 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。