2016-11-14 71 views
0

在我的應用程序中,我需要發送通知的時間是1周,或者是用戶在應用程序中執行了一些操作後的1個月內發送的通知...它與此類BroadcastReceiver一起工作>>重新啓動後恢復報警計數器

public void startMyReceiver() { 
    Long time = new GregorianCalendar().getTimeInMillis() + 1000 * 60 * 60 * 24 * 30; <-- for 1 month (it's getting numeric overflow, but is working) 
    Long interval = 2592000000L; 

    Intent intentAlarm = new Intent(this, MyReceiver.class); 

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, interval, PendingIntent.getBroadcast(this, 2, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT)); 
} 

那麼簡單的接收器類>>

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

然後在AndroidManifest.xml >>

<application> 
<receiver android:name="mypackage.MyReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
</application> 

我已經設置了「android.intent.action.BOOT_COMPLETED」,認爲它將恢復計數器並繼續計數直到時間結束...

但是它在設備啓動時立即啓動我的接收器...

如何將接收器設置爲1個月,然後在重新啓動後繼續計數?

- 編輯 - 新的問題 -

如何將存儲的時間和做計算最簡單的方法?像這樣? >>

1 - 首次定義警報時,我將當前時間以毫秒爲單位保存在Long firstTime中,並將警報定義爲firstTime + longOneMonth;

2 - 在接收機開機,我再次獲取當前時間,並將其保存在龍rebootTime,然後我做的:

Long timeDifference = rebootTime - firstTime; 
Long differenceToMonth = longOneMonth - timeDifference; 

,並重新設置接收機時間rebootTime + differenceToMonth?

- EDIT 2 -

也許,如果我轉換的第一接收機設置millisseconds的日期字符串和應用()到共享偏好,重新啓動的時候,我可能會再次將其轉換成millisseconds .. 。我想這會工作,更容易

+0

保存和sharedPreferences,文件或數據庫檢索。首先可能是最簡單的。 – MikeT

+0

請在主文件中添加一個新問題 –

回答

1
  1. 定義另一個引導的BroadcastReceiver。
  2. 在某處存儲時間(一個月後)
  3. 設備啓動時,所有報警都將消失。所以當設備啓動時,調用另一個會再次設置鬧鐘的功能。但要注意,自上次設置鬧鐘以來(例如7天前設置了鬧鐘),應該考慮一段時間,因此您應該始終計算設置時間和現在時間之間的差異;

編輯:計算時間 最簡單的方法是,當你設置報警,你直接存儲now時間毫秒。下一次,你現在再次得到時間,並減去之前儲存的時間。那就是時差!

在端部負一個月的時間差值

Long time = 
new GregorianCalendar().getTimeInMillis() + 
(1000 * 60 * 60 * 24 * 30) - 
TIME_DIFFERENCE 
+0

編輯我的問題,包括一個新文件 –

+0

明白了......它一定會奏效......謝謝! –