2012-12-23 60 views
1

使用此代碼,我嘗試設置alarmmanager在25/12/2012 - 15.15星號Notify.class,但是當我使用此代碼時,Notify.class無法啓動。問題在哪裏?alarmmanager選擇時間和日期

Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault()); 

    cal.set(Calendar.DATE,25); 
    cal.set(Calendar.MONTH,Calendar.DECEMBER); 
    cal.set(Calendar.YEAR,2012); 
    cal.set(Calendar.HOUR_OF_DAY, 15); 
    cal.set(Calendar.MINUTE, 15);  
    cal.set(Calendar.SECOND, 00);  

Intent intent3 = new Intent(context, Notify.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,intent3, 0); 
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 

清單:

<activity android:name="Notify"></activity> 
<receiver android:name="AlarmReceiver" > 
      <intent-filter> 
       <action android:name="com.example.AlarmReceiver" /> 
      </intent-filter> 
+1

是Notify.class登記您的清單?你有註冊廣播接收機接收廣播嗎? Notify.class是一個活動(使用PendingIntent.getActivity),一個服務(使用PendingIntent.getService),一個廣播接收器(使用PendingIntent.getBroadcast)?您可以在這裏閱讀更多關於掛起的意圖:http://developer.android.com/reference/android/app/PendingIntent.html – logray

+0

是的,我已經檢查了清單,一切都很好。 –

+0

好的,你能告訴我們你的manifest和Notify.class嗎? – logray

回答

1

你應該寫這個

<receiver android:name="com.example.AlarmReceiver" android:enabled="true"> 
     <intent-filter> 
      <action android:name="AlarmReceiver"/> 
     </intent-filter> 
</receiver> 

您已切換的android:命名接收器和它的意圖過濾器。您可以與.AlarmReceiver

更換com.example.AlarmReceiver你已經在你的清單)這個變化,任何代碼你寫裏面的onReceive(你的廣播接收器的方法之後com.example.AlarmReceiver將被執行。

你的代碼會做的是它將設置指定日期時間的鬧鐘管理器。在那一刻,它將觸發一個動作名稱爲AlarmReceiver的意圖。您的廣播接收器在Manifest中,因此它將捕獲廣播並執行onReceive()方法。

如果你想開始一個活動,在onReceive()中寫入context.startActivity(...)。

編輯:也改變你的意圖是:

Intent intent3 = new Intent("AlarmReceiver"); 
+0

爲了安全起見,他應該改變他的意圖到'意圖intent3 =新的意圖(這,AlarmReceiver.class);'在Intent構造函數中使用字符串是要求事情不工作。 –

+0

哦是的,當然。但是沒有提到應該是一個好習慣的意圖? – drulabs

1

如果你只是試圖啓動活動Notify.class,那麼就改變這一行:

PendingIntent.getBroadcast 

PendingIntent.getActivity 

你也應該改變這一行anifest:

來自:

<activity android:name="Notify"></activity> 

<activity android:name=".Notify"></activity> 

您還應該提供一個機器人:名字和android:標籤爲這項活動。

如果您嘗試使用getBroadcast代替,則需要更改此行,以便您的接收器獲取廣播,而不是啓動具有掛起意圖的活動。對於您將使用

Intent intent3 = new Intent(context, AlarmReceiver.class); 

而不是

Intent intent3 = new Intent(context, Notify.class); 

您也可能希望將操作添加到您的intent3,例如:

intent3.setAction( 「com.example.AlarmReceiver」 );

這樣在AlarmReceiver中,您可以過濾該意圖並執行操作,例如使用新的意圖啓動活動Notify.class。

+0

完美的作品!非常非常感謝,聖誕快樂! –

+0

@PolHallen很高興它工作,聖誕快樂 – logray