如何在后台没有任何活动的情况下弹出警报消息?

时间:2012-05-23 12:44:15

标签: android alarmmanager alarm android-alarms

在我的android i app中,我可以报警功能以及退出功能。设置闹钟时间后,我点击退出按钮退出应用程序。

我正在使用

         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); 

此代码退出应用程序,进入主页屏幕,然后启动主屏幕。这是因为当我回到我的应用程序时,它会启动画布。报警工作正是我想要的但是当报警弹出消息它在背景中有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();

        }
}

我该怎么做? 谢谢你的帮助..

2 个答案:

答案 0 :(得分:3)

您应该使用Alarm Manager在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重新创建相同的待处理意图:

 alarmManager.cancel(pendingIntent);

答案 1 :(得分:1)

首先创建一个挂起的意图,如下所示:

 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);

现在您需要创建一个服务来捕获您的警报。