[英]Is there a way to prevent my app from sending notifications for a certain time frame?
我正在嘗試制作一個應用程序,當應用程序接收到的數據不是它應有的數據時,它會通知用戶(認為蒸汽低於華氏 212 度)。 如果用戶在應用程序中,應用程序還會顯示信息。 在這種情況下,我能夠收到要發送的通知。 唯一的問題是信息需要真正是最新的,所以每 10 秒更新一次。 如果數據持續不正確,這將使應用程序每 10 秒發送一次通知。 有沒有辦法防止在指定時間內重復通知? (約 10 - 15 分鍾)
我曾嘗試在for
循環中使用thread.sleep(1000)
使其等待 10 分鍾,但這會使整個更新系統暫停 10 分鍾,因此沒有信息進入應用程序。 我是 android studio 的新手,在網上找不到任何東西來幫助我解決這個問題。
這只是應用程序知道發送通知的方式。 如果我可以繼續使用它,那將是理想的,但如果有更好的方法,我願意改變它。
//ERROR Notification
if (map.get("steamTemp") < 212 || map.get("steamTemp") > 500 ||
map.get("waterTemp") < 40 || map.get("waterTemp") > 150||
map.get("dieselFlow") < 50 || map.get("dieselFlow") > 100 ||
map.get("waterFlow") < 50 || map.get("waterFlow") > 100||
map.get("waterFeederLevel") < 10 || map.get("waterFeederLevel") > 150) {
NotificationManager notif = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
Notification notify = new Notification.Builder
(getApplicationContext())
.setContentTitle("ERROR: Device Error")
.setContentText("Please see app for more information.")
.setSmallIcon(R.drawable.error_notif)
.setSound(soundUri)
.build();
notify.flags |= Notification.FLAG_AUTO_CANCEL;
notif.notify(0, notify);
}
我希望在出現問題時發送通知,但之后等待 10 分鍾再發送另一個通知。 我上面解釋的thread.sleep(1000)
示例的問題在於它暫停了整個應用程序,而不僅僅是通知。 這是不行的,因為如果用戶查看應用程序需要顯示更新的信息。
正如 carlosgub 所提到的,您可以使用自己硬編碼或用戶輸入的首選項來確定何時發送它們。 下面是一些示例代碼:
import android.content.Context;
import android.content.SharedPreferences;
import java.util.Date;
public class YourClass {
//Key in Shared Preferences to use
private static final String LAST_UPDATE = "lastUpdate";
//10 minutes, adjust to your preferences
private static final long NUMBER_MILLISECONDS_BETWEEN_UPDATES = (1000L * 60L * 10L);
//Your Shared Preferences name
private static final String SP_NAME = "yourSPName";
private static void saveLastUpdateTime(Context context) {
SharedPreferences sharedPref = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
long x = new Date().getTime();
editor.putLong(LAST_UPDATE, x);
editor.commit();
}
private static long getLastUpdateTime(Context context) {
SharedPreferences sharedPref = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
return sharedPref.getLong(LAST_UPDATE, -1);
}
public static boolean shouldSendNotification(Context context) {
long lastUpdate = getLastUpdateTime(context);
if (lastUpdate == -1) {
saveLastUpdateTime(context);
//This means it has yet to run
return true;
}
long now = new Date().getTime();
if ((now - lastUpdate) > NUMBER_MILLISECONDS_BETWEEN_UPDATES) {
saveLastUpdateTime(context);
return true;
} else {
return false;
}
}
}
在這里的代碼中,您調用shouldSendNotification()
並且如果它返回 false,則距上次運行還不到 10 分鍾,如果返回 true,則距上次運行已超過 10 分鍾(或已從不運行)。
要在您的代碼中使用它,在構建notify
對象的方法的頂部,只需調用它,如果它返回 false,則返回:
if(!YourClass.shouldSendNotification(context)){
return;
}
只需確保根據您的喜好調整值(雙關語)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.