2015-06-24 51 views
0

我在MainActivity創建AlarmManager這樣Android的暫停和重啓報警經理廣播接收機

AlarmManager mgr = (AlarmManager) getApplicationContext() 
       .getSystemService(Context.ALARM_SERVICE); 
Intent notificationIntent = new Intent(getApplicationContext(), 
       TransactionService.class); 
PendingIntent pendingIntent=PendingIntent.getService(getApplicationContext(), 0, notificationIntent, 0); 
     mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), 2000, pendingIntent); 

我想對於一些條件,在廣播接收器停止此報警經理。在廣播接收器的代碼下面(不管它是什麼)。

public class IncomingSms extends BroadcastReceiver { 
private Intent notificationIntent; 

public void onReceive(Context context, Intent intent) { 
} 
} 
} 

那麼,如何訪問此報警管理器並將其暫停到我的廣播接收器中,以及如何重新啓動它?

+0

也許你可以使用在後臺運行永久的服務。你可以比使用任何condtion停止並重新啓動它.. – RajSharma

+0

如果我停止在我的廣播接收器服務,然後警報管理器必須在2秒後重新啓動它,所以這不是一個解決方案 – Amalo

+0

因爲AlarmManager不是你的財產,但是系統服務,你無法阻止它。你只能取消預定的活動 –

回答

2
public class IncomingSms extends BroadcastReceiver { 
    private Intent notificationIntent; 

    public void onReceive(Context context, Intent intent) { 
     AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     Intent notificationIntent = new Intent(context, TransactionService.class); 
     PendingIntent pendingIntent=PendingIntent.getService(getApplicationContext(), 0, notificationIntent, 0); 
     mgr.cancel(pendingIntent) 
    } 
} 

您只需重新生成PendingIntent並將其傳遞給AlarmManager的cancel()方法。你的PendingIntent的確定將通過檢查你的PendingIntent的id和做是否含意向將滿足filterEquals() - 這裏定義的要求:http://developer.android.com/reference/android/content/Intent.html#filterEquals%28android.content.Intent%29

的更多信息:http://developer.android.com/reference/android/app/AlarmManager.html#cancel%28android.app.PendingIntent%29

如果你想重新開始,你只需要再次註冊到你的PendingIntent。

+0

這是最好的解決方案,謝謝你的工作 – Amalo

0

一旦啓動,您不能暫停AlarmManager,您可以取消警報管理器並在需要時重新啓動它。

如果您知道警報註冊時給出的ID,您可以取消警報事件。

AlarmManager mgr = (AlarmManager) getApplicationContext() 
       .getSystemService(Context.ALARM_SERVICE); 
Intent notificationIntent = new Intent(getApplicationContext(), 
       TransactionService.class); 
PendingIntent pendingIntent=PendingIntent.getService(getApplicationContext(), 0, notificationIntent, 0); 

alarmManagerstop.cancel(pendingIntent);