- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在使用 AlarmManager()
来触发通知并每 24 小时重复一次。
我的代码在 Splash Activity 中的 onCreate()
上,当任何人打开 App 时首先触发。用户可以随时安装应用程序。所以我希望当用户安装应用程序时,它会检查时间,然后在上午 8 点触发通知并每天重复。当有人打开应用程序时,我不希望收到通知。
我的代码如下:
public class Splash extends Activity {
final String WebsiteURL = "http://www.mytestbuddy.com";
String cookie;
@SuppressLint("SimpleDateFormat")
@Override
protected void onCreate(Bundle showSplash) {
// TODO Auto-generated method stub
super.onCreate(showSplash);
setContentView(R.layout.splash);
getWindow().getDecorView().setBackgroundColor(Color.WHITE);
Intent myIntent = new Intent(Splash.this, AlarmReceiver.class);
final PendingIntent pendingIntent = PendingIntent.getBroadcast(
Splash.this, 0, myIntent, 0);
final AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
CookieSyncManager.createInstance(this);
CookieManager cm = CookieManager.getInstance();
cm.setAcceptCookie(true);
CookieSyncManager.getInstance().sync();
if (cm.getCookie("" + WebsiteURL + "") != null) {
cookie = cm.getCookie("" + WebsiteURL + "").toString();
} else {
cookie = null;
}
Thread timer = new Thread() {
public void run() {
try {
sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (cookie == null) {
Intent openStartingPoint = new Intent(
"com.MobileWeb.mytestbuddy.Login");
startActivity(openStartingPoint);
} else if (cookie.contains("Premium")) {
Calendar firingCal = Calendar.getInstance();
Calendar currentCal = Calendar.getInstance();
firingCal.set(Calendar.HOUR, 10);
firingCal.set(Calendar.MINUTE, 30);
firingCal.set(Calendar.SECOND, 0);
long intendedTime = firingCal.getTimeInMillis();
long currentTime = currentCal.getTimeInMillis();
if (intendedTime >= currentTime) {
alarmManager.setRepeating(AlarmManager.RTC,
intendedTime, AlarmManager.INTERVAL_DAY,
pendingIntent);
} else {
firingCal.add(Calendar.DAY_OF_MONTH, 1);
intendedTime = firingCal.getTimeInMillis();
alarmManager.setRepeating(AlarmManager.RTC,
intendedTime, AlarmManager.INTERVAL_DAY,
pendingIntent);
}
Intent openStartingPoint = new Intent(
"com.MobileWeb.mytestbuddy.PremiumMain");
startActivity(openStartingPoint);
} else {
Calendar firingCal = Calendar.getInstance();
Calendar currentCal = Calendar.getInstance();
firingCal.set(Calendar.HOUR, 10);
firingCal.set(Calendar.MINUTE, 30);
firingCal.set(Calendar.SECOND, 0);
long intendedTime = firingCal.getTimeInMillis();
long currentTime = currentCal.getTimeInMillis();
if (intendedTime >= currentTime) {
alarmManager.setRepeating(AlarmManager.RTC,
intendedTime, AlarmManager.INTERVAL_DAY,
pendingIntent);
} else {
firingCal.add(Calendar.DAY_OF_MONTH, 1);
intendedTime = firingCal.getTimeInMillis();
alarmManager.setRepeating(AlarmManager.RTC,
intendedTime, AlarmManager.INTERVAL_DAY,
pendingIntent);
}
Intent openStartingPoint = new Intent(
"com.MobileWeb.mytestbuddy.Main");
startActivity(openStartingPoint);
}
}
}
};
timer.start();
}
}
最佳答案
按照 chintan 的建议进行操作。为了获得清晰的图像,确切的解决方案
可能类似于以下内容:
Intent myIntent = new Intent(Splash.this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(Splash.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar firingCal= Calendar.getInstance();
Calendar currentCal = Calendar.getInstance();
firingCal.set(Calendar.HOUR, 8); // At the hour you wanna fire
firingCal.set(Calendar.MINUTE, 0); // Particular minute
firingCal.set(Calendar.SECOND, 0); // particular second
long intendedTime = firingCal.getTimeInMillis();
long currentTime = currentCal.getTimeInMillis();
if(intendedTime >= currentTime){
// you can add buffer time too here to ignore some small differences in milliseconds
// set from today
alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, pendingIntent);
} else{
// set from next day
// you might consider using calendar.add() for adding one day to the current day
firingCal.add(Calendar.DAY_OF_MONTH, 1);
intendedTime = firingCal.getTimeInMillis();
alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, pendingIntent);
}
关于android - 每 24 小时和早上 8 点的确切时间发出火灾通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16870781/
我正在尝试编写一个 HTML 文档,向访问者显示问候语,例如“早上好/下午/晚上好!”但我不知道如何同时使用小时和分钟: ITP1 var myDate = ne
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
我正在尝试找到一种方法来获取一天中的时间。显然有一种简单的方法可以做到这一点 Application to Display Morning,Evening如果您对一种语言的静态词没问题。有没有办法根据
这是我的数据框,我需要根据行值(早上、下午、晚上、晚上)的时间创建一个新列 这是我的代码 if ((prods['hour'] 8 )): prods['session'] = 'Early
我在时间数据框中有这个向量,格式为小时:分钟,我想将其转换为一天中的分类时间: time <- c("15:03", "08:01", "11:59", "23:47", "14:20")
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我目前像这样对我的 DelayedJob 进行排队: Delayed::Job.enqueue MyJob.new, 5, 1.day.from_now 我正在寻找一种设置不同执行时间的方法: Tom
我每天都有很多事件。有没有办法将这些事件按水平移动类别分开?我可以添加一个额外的标志(或类即:早上、白天、晚上、晚上)以及“标题:”和“开始:”,以便事件将在同一天内按各自的水平移动进行组织吗?我用过
我是一名优秀的程序员,十分优秀!