0

在我的 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();

        }
}

我怎么做?谢谢你们的帮助。。

4

2 回答 2

3

您应该使用警报管理器在 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);
于 2012-05-23T13:03:21.067 回答
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);

现在您需要创建一项服务来捕捉警报。

于 2016-12-09T13:53:00.863 回答