如何在后台没有任何活动的情况下弹出警报消息?
Posted
技术标签:
【中文标题】如何在后台没有任何活动的情况下弹出警报消息?【英文标题】:How to popup Alarm Message without any activity in background? 【发布时间】:2012-05-23 12:44:15 【问题描述】:在我的 android i 应用程序中,我可以使用警报功能和注销功能。设置闹钟时间后,我将通过单击注销按钮退出应用程序。
我正在使用
ExitActivity.this.finish();
Intent intent1 = new Intent(ExitActivity.this,PinActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent1);
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
此代码退出应用程序,进入主屏幕,然后启动主屏幕。这是因为当我回到我的应用程序时,它会启动 pinscreen。警报完全符合我的要求,但是在弹出警报消息时,它在后台具有 pinactivity(我不想要)。我不想摆脱后台的 pin 活动。
这是我的接收器类?
public class ShortTimeEntryReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
Toast.makeText(context,"Alarm Working", Toast.LENGTH_SHORT).show();
try
Bundle bundle = intent.getExtras();
String message = bundle.getString("alarm_message");
Intent newIntent = new Intent(context, ReminderPopupMessage.class);
newIntent.putExtra("alarm_message", message);
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(newIntent);
catch (Exception e)
Toast.makeText(context, "There was an error somewhere, but we still received an alarm", Toast.LENGTH_SHORT).show();
e.printStackTrace();
我该怎么做? 谢谢你们的帮助。。
【问题讨论】:
【参考方案1】:您应该使用警报管理器在 Android 中设置警报。警报管理器保留您的警报并在警报时间触发未决意图。
首先像这样创建一个待处理的意图:
pendingIntent = PendingIntent.getService(CONTEXT, ALARM_ID, INTENT_TO_LAUNCH, 0);
然后使用这个待处理的意图来设置这样的警报:
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, ALARM_TIME, pendingIntent);
这将在给定时间启动待定意图。
要删除警报,您必须使用相同的 ALARM_ID 重新创建相同的 Pending Intent:
alarmManager.cancel(pendingIntent);
【讨论】:
实际上我已经做到了。这就是我现在正在做的,但问题是当警报弹出消息我看到最后使用的背景屏幕时,我不需要... 那你为什么不在警报弹出时完成你的pin活动呢? 那是什么问题..是否可以从另一个活动中关闭活动.. 是的,这是可能的。只需使用您要关闭的活动的上下文并在任何您想要的地方调用 finish() 方法:ACTIVITY_CONTEXT.finish()
感谢您的评论。抱歉,我对获取 Activity 的上下文一无所知。请您帮帮我【参考方案2】:
首先像这样创建一个待处理的意图:
pendingIntent = PendingIntent.getService(context, alarm_id, Pass your data with intent, PendingIntent.FLAG_UPDATE_CURRENT);
这样设置闹钟:
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
//19 4.4and above api level
am.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() + AlarmManager.INTERVAL_DAY, sender);
else
//below 19 4.4
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() + AlarmManager.INTERVAL_DAY, sender);
这将在给定时间启动待定意图。
要删除警报,您必须使用相同的待处理意图和相同的ALARM_ID
:
am.cancel(pendingIntent);
现在您需要创建一项服务来捕捉警报。
【讨论】:
以上是关于如何在后台没有任何活动的情况下弹出警报消息?的主要内容,如果未能解决你的问题,请参考以下文章
GCM 如何检测应用程序是不是打开,如果是,则弹出警报框,而不是正常的通知流程?