2016-11-07 56 views
0

这qustion已经很多问我试图回答的很多,并没有工作,所以这是最常见的一种如何检查AlarmManager是否已经工作?

public void onClick(View v) { 
      boolean alarmUp = (PendingIntent.getBroadcast(MainActivity.this ,0, 
        new Intent(MainActivity.this,Notifications.class), 
        PendingIntent.FLAG_NO_CREATE) != null); 

      if (alarmUp) 
      { 
       am.cancel(pend); 
       Intent alarmIntent = new Intent(MainActivity.this,Notifications.class); 
       final PendingIntent pendingIntent = 
         PendingIntent.getBroadcast(MainActivity.this, 0, alarmIntent, 
           PendingIntent.FLAG_NO_CREATE); 
       if (pendingIntent != null) { 
        pendingIntent.cancel(); 
       } 
       Toast.makeText(MainActivity.this,"Tweak cleared", Toast.LENGTH_LONG).show(); 
      } 
      else { 
       Toast.makeText(MainActivity.this,"There is no Tweak!", Toast.LENGTH_LONG).show(); 
      } 

这个按钮在我的MainActivity,每次它的pressed我要检查是否有是一个闹钟还是没有,那么如果有取消闹钟“am”和吐司按摩..现在应用程序总是在else语句中敬酒按摩“没有调整!”即使有闹钟..我是Android的初学者,所以将不胜感激任何帮助..谢谢。

编辑

这是我的MainActivity另一个按钮用于启动报警

start.setOnClickListener(new View.OnClickListener() { 
     @Override 

public void onClick(View v) { 
      intent = new Intent(getApplicationContext(), Notifications.class); 
      pend = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      am = (AlarmManager) getSystemService(ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60, pend); 

我按下这个按钮之前我按另一种是将其取消。

编辑

这是我的其他的尝试来检查报警并取消it..it工作,但是当我关闭应用程序,它再次告诉没有报警打开它“有没有好办法!”即使有一个

cancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (am != null && pend != null) { 
       am.cancel(pend); 
       pend = null; 
       Toast.makeText(MainActivity.this,"Tweak cleared", Toast.LENGTH_LONG).show(); 
      } 

      else { 
       Toast.makeText(MainActivity.this,"There is no Tweak!", Toast.LENGTH_LONG).show(); 
      } 

     } 

    }); 

挂起和我都被因为你正在使用的标志“PendingIntent.FLAG_NO_CREATE”中的“开始”按钮初始化

感谢

回答

0

prviate变量,它表明如果描述的PendingIntent不存在,那么只需返回null而不是创建它。

从您的代码中,您以前从未创建过PendingIntent,因此它将始终返回null。

+0

我添加了创建待定意图的代码 –

+0

我没有使用相同的pendind意图我想通了......感谢:) –

+0

是的,你没有使用相同的未决意图。 –

0
private AlarmManager mAlarmMgr; 
private PendingIntent mPendingIntent; 

if (mAlarmMgr != null && mPendingIntent != null) { 
    mAlarmMgr.cancel(mPendingIntent); 
    mPendingIntent = null; 
    Log.v("alarm", "done"); 
} else { 
    Log.v("alarm", "no PendingIntent instance to cancel"); 
} 

这就是你如何取消报警。

+0

非常感谢你的时间我只是回答了它..这是愚蠢的错误 –

+0

@AhmedFahmy没问题,很高兴你解决了它;) – GuilhE

+0

嘿,我有一个问题,我用另一种方法,所以我想我应该尝试你的因为我觉得它更简单..只要我在应用程序中工作良好,但是当我关闭它并再次返回以取消警报时,它告诉我没有警报。我认为这可能是因为当我关闭应用程序时,PendingdIntent“pend”变为null ..我用新代码编辑问题..再次感谢! –