2013-11-28 84 views
4

我想通知用戶有關回答每週的問題。我需要將通知發送給用戶,即使我的應用程序沒有運行。通知將在一週內發送一次。 當用戶點擊通知我的應用程序將被打開。 我試過這個通過Timer和TimerTask()。當我的應用程序正在運行時,它會通知用戶。如何在應用程序未運行時將通知發送給用戶。每週發送一次通知

任何人都可以幫助我嗎?

+1

嘗試使用AlarmManager! –

+0

你有沒有將通知API作爲Urban Air Ship? – Pull

+0

如何將AlarmManager與通知類 – Jolly

回答

13

以下代碼使用AlarmManager與BroadcastReceiver,它可以幫助您實現您的需求。

在你的活動:

Intent intent = new Intent(MainActivity.this, Receiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, REQUEST_CODE, intent, 0); 
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
am.setRepeating(am.RTC_WAKEUP, System.currentTimeInMillis(), am.INTERVAL_DAY*7, pendingIntent); 

System.currentTimeInMillis() - 表示該報警將觸發在當前時間,你可以通過每天毫秒的恆定時間。

然後創建一個接收器類這樣的事情,

public class Receiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     showNotification(context); 
    } 

    public void showNotification(Context context) { 
     Intent intent = new Intent(context, AnotherActivity.class); 
     PendingIntent pi = PendingIntent.getActivity(context, reqCode, intent, 0); 
     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.android_icon) 
      .setContentTitle("Title") 
      .setContentText("Some text"); 
     mBuilder.setContentIntent(pi); 
     mBuilder.setDefaults(Notification.DEFAULT_SOUND); 
     mBuilder.setAutoCancel(true); 
     NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(reqCode, mBuilder.build()); 
    } 
} 

你也需要註冊您的廣播接收器類的清單文件,如下所示。 在AndroidManifest.xml文件內標籤,

<receiver android:name="com.example.receivers.Receiver"></receiver> 

這裏的「com.example.receivers.Receiver」是我的包,我的接收器名稱。

+0

我可以知道什麼是待處理意圖中的REQUEST_CODE + 2? – Jolly

+0

REQUEST_CODE是一些使未決意圖唯一的整數值。我已經爲此初始化了一個值。 –

+0

我把0放置。爲什麼你加2到那個值?INTERVAL_DAY是否有任何值。爲了檢查我需要替換那個值? – Jolly