android - 如何在不打开应用程序的情况下运行警报
问题描述
根据这个问题需要后台服务。
我试图这样做,但我无法确定我应该在服务内的哪里调用警报管理器。
我的服务.java
这是我尝试过的服务类。
public class MyService extends Service{
PendingIntent pendingIntent;
AlarmManager alarmManager;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Query the database and show alarm if it applies
// I don't want this service to stay in memory, so I stop it
// immediately after doing what I wanted it to do.
pendingIntent = PendingIntent.getBroadcast(
this.getApplicationContext(), 280192, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 11);
calendar.set(Calendar.MINUTE, 55);
calendar.set(Calendar.SECOND,00);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent);
// stopSelf();
return START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
// // I want to restart this service again in one minute
// AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
// alarm.set(
// alarm.RTC_WAKEUP,
// System.currentTimeMillis() + (1000 * 60 * 1),
// PendingIntent.getService(this, 0, new Intent(this, MyService.class), 0)
// );
}
}
请指导我在特定时间段内提醒用户,即使应用程序未运行。谢谢你
解决方案
您不需要为此用例创建自己的服务,您可以为此使用 Android 框架中的 Alarmservice,它可以启动应用程序(即使应用程序未运行)并设置时间,前提是手机处于 ON 状态。现在设置闹钟,可以在任何视图(活动/片段)中调用。您可以创建一个按钮并设置操作以根据需要设置警报。在调用警报时,您使用挂起的广播接收器进行任何后续操作。要求如下设置警报,您可以使用 Pending Broadcast intent 来做您的事情。相信我,即使您的应用程序没有运行,它也能正常工作。注意 - AlarmBroadCastReceiver 应该是一个清单接收器,即在清单文件中声明。
private void setAlarm(int type) {
// AlarmManager
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
// Alarm type
int alarmType = AlarmManager.RTC;
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
switch (type) {
case 1:
// Set Alarm for next 20 seconds
time.add(Calendar.SECOND, 20);
break;
case 2:
// Set Alarm for next 2 min
time.add(Calendar.MINUTE, 2);
break;
case 3:
// Set Alarm for next 30 mins
time.add(Calendar.MINUTE, 30);
break;
}
Intent broadcastIntent = new Intent(this, AlarmBroadCastReceiver.class);
broadcastIntent.putExtras(sourceIntent);
Random generator = new Random();
PendingIntent pendingAlarmIntent = PendingIntent.getBroadcast(this,
generator.nextInt(), broadcastIntent,
PendingIntent.FLAG_ONE_SHOT);
alarmManager.set(alarmType, time.getTimeInMillis(), pendingAlarmIntent);
}
推荐阅读
- android - 如何使用 kotlin 将图像上传到 Firebase
- javascript - 获取列表顺序并发布php
- azure - 我的 Azure 云成本会因为 DOS 攻击而飙升吗
- python - python 输入的类型是什么。可选
- excel - 使用 Excel Power Query 转换表
- spring - DispatcherServlet 中的“INCLUDE”调度是什么?
- ember.js - 刷新 ember 模型
- sql - 如何使用 WHERE 编写具有两个条件的查询
- angular - momentjs 中的时间转换不正确
- logstash - 如何在 Graylog 中添加/删除附加字段