2016-11-07 47 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 ..我用新代碼編輯問題..再次感謝! –