2014-09-27 57 views
3

我試圖在20秒後播出並用擴展接收器ExtendedReceiver接收廣播。PendingIntent和AlarmManager

這裏是我的函數創建一個報警,並設置PendingIntent 20秒後熄滅:

public void alert() { 
    GregorianCalendar cal = new GregorianCalendar(); 
    cal.add(Calendar.SECOND, 20); 

    Intent i = new Intent(this, ExtendedReceiver.class); 
    int _uid = (int) System.currentTimeMillis(); 
    PendingIntent pi = PendingIntent.getBroadcast(this, _uid, i, PendingIntent.FLAG_ONE_SHOT); 

    AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE); 
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi); 

    Log.i("Title", "Alarm has been set"); 
} 

這裏是ExtendedReceiver類:

public class ExtendedReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("Title", "Broadcast received"); 
    } 
} 

我得到我的第一個日誌消息: Alarm has been set但我沒有收到我的第二條日誌消息。我不確定問題出在哪裏(Android上的第一天)

+1

你在你的Manifest.xml文件註冊ExtendedReceiver? – joao2fast4u 2014-09-27 17:59:11

回答

2

如果我可能這是我總是這樣做的。

更改

PendingIntent pi = PendingIntent.getBroadcast(this, _uid, i, PendingIntent.FLAG_ONE_SHOT); 

PendingIntent pi = PendingIntent.getBroadcast(this, _uid, new Intent(EXTENDED_RECEIVER_ACTION), PendingIntent.FLAG_ONE_SHOT); 

和重要的:註冊您的ExtendedReceiver這樣的:

... 
registerReceiver(new ExtendedReceiver() , new IntentFilter(EXTENDED_RECEIVER_ACTION)); 

PS:EXTENDED_RECEIVER_ACTION是一個String不要忘記註銷您的接收器。

進一步文檔here

希望它能幫助:)