2012-11-28 26 views
5

我是這個整個Android環境的新手,我通常會有一些疑問,也許你可以考慮非常基本的知識並且有點愚蠢。我會盡我所能解釋我有的疑問,爲什麼我要讓我明白。無論類是否應用程序上下文總是相同?

我正在做一個應用程序,您可以設置通知來提醒您所需的學者課程。我已經完成了擴展BroadcastReceiver的類,以便它可以在設備啓動後重置所有警報。我有,我保持有關報警信息的數據庫:類,它必須被配置的時間,等我找回所有報警,並將它們設置爲alarmManager這樣:

intent = new Intent(ctxt.getApplicationContext(), Notificacion.class); 
intent.putExtra("TAG", tag); 
intent.putExtra("SUBJECT", cursor2.getString(0)); 
intent.putExtra("AULA", cursor2.getString(1));     
displayIntent = PendingIntent.getBroadcast(ctxt, Integer.parseInt(tag), intent, PendingIntent.FLAG_UPDATE_CURRENT);    
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY*7, displayIntent); 

嗯,我想這應該很好,直到這裏。問題是,當您使用的應用程序,你要設置的通知,你是從類「Schedule.class」做這樣的意圖將有此背景下:

Intent intent = new Intent(getApplicationContext(), Notification.class); 
PendingIntent pend = PendingIntent.getBroadcast(this, Integer.parseInt(tag), intent, PendingIntent.FLAG_UPDATE_CURRENT); 

在應用中,你可以刪除一個鬧鐘,你必須調用alarmManager.cancel(掛起)才能做到這一點。所以我的疑問是它是否能夠取消它。

如果上下文不同,它將無法找到匹配的待定意圖,因爲它是從我在我的擴展BroadCastReceiver(ctxt)中得到的上下文中設置的,並且警報是使用上下文獲得的來自Schedule.class。

那麼......應用程序上下文總是一樣嗎?我知道上下文是爲了向其他類提供有關正在發生的事情的信息而設置的,但我不確定Intent過濾器是否會區分給定上下文的位置。

預先感謝您!

回答

2

在AlarmManager文檔尋找cancel方法你使用:API等級1

public void cancel (PendingIntent operation)

添加了一個匹配的意圖刪除任何警報。任何類型的任何 警報將被取消,其任何類型的警報,其意圖匹配這一個(定義爲 filterEquals(Intent),將被取消。

因此,Intent.filterEquals文檔說以下內容:

public boolean filterEquals (Intent other)

在API級別1

確定兩個意圖是爲 目的意圖同分辨率(過濾)。那就是,如果他們的動作, 的數據,類型,類和類別都是一樣的。這並不比較意圖中包含的任何額外數據。

我想不出任何理由的動作,數據類型,類或類別會有所不同,從一個明確意向到另一個(除非顯然,你出去自己的方式來改變那些東西) 。上下文似乎不在匹配的標準中,所以我認爲您可以相當自信,無論首先使用哪種上下文創建它,它都會被取消。

+0

這就是我的想法。但我不確定上下文是否在數據中,因此它會過濾爲不同的意圖。無論如何,我會嘗試做一些測試,看看它是否正常工作,我會在這裏更新。 謝謝! –

+0

不,在Intent類中的mData變量是一個URI,所以這不應該是一個問題。 – ajpolt

+0

好吧,一切都清楚了。非常感謝你。它工作得很好= D –

相關問題