对于某些Android应用程序,我想集成以下功能:

用户可以定义他想要被提醒的时间.当时间到了,应用程序应该在通知栏中创建通知,即使此时用户没有使用该应用程序.

为此,需要查看AlarmManager,NotificationManager和Notification.Builder类,对吧?

那么我该如何提前创建定时通知呢?我的代码(到目前为止)是这样的:

将其添加到AndroidManifest下以注册广播接收器:

创建一个新的类文件来处理它收到的警报:

public class AlarmNotificationReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {

Bundle extras = intent.getExtras();

if (extras != null) {

String additionalData = extras.getString("displayText");

// show the notification now

NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

Notification mNotification = new Notification(R.drawable.ic_launcher, context.getString(R.string.app_name), System.currentTimeMillis());

PendingIntent pi = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0); // open MainActivity if the user selects this notification

mNotification.setLatestEventInfo(context, context.getString(R.string.app_name), additionalData, pi);

mNotification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.DEFAULT_SOUND;

mNotificationManager.notify(1, mNotification);

}

}

}

使用此代码(例如在MainActivity中)将警报设置为3秒后:

Intent i = new Intent(this, AlarmNotificationReceiver.class);

i.putExtra("displayText", "sample text");

PendingIntent pi = PendingIntent.getBroadcast(this.getApplicationContext(), 234324246, i, 0);

AlarmManager mAlarm = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);

mAlarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+3*1000, pi);

为了使这项工作,我需要改变什么?谢谢!

这两个问题是:

>当我在代码中更改通知时,通知的文本不会更改.它只会在我更改PendingIntent.getBroadcast(…)中的requestCode时更改.这个请求代码到底是什么?可以是随机值还是0?

>重新启动手机后,“计划”通知或警报消失.但是现在我已经看到这是正常行为,对吗?我怎么能绕过这个呢?

解决方法:

对第1部分不确定,但对于第2部分,一般方法是拦截BOOT_COMPLETED意图并使用它重新注册所有警报.遗憾的是,对于您在警报管理器中注册的每个警报,您都必须将其存储在应用程序的数据库中.

因此,您需要一个广播接收器来拦截BOOT_COMPLETED意图:

public class BootReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

// get your stored alarms from your database

// reregister them with the alarm manager

}

}

要获取BOOT_COMPLETED意图,您必须在清单中添加以下权限:

并且BootReceiver还需要使用以下intent过滤器在您的清单中注册:

android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

重要的是要注意,如果您的应用程序安装到SD卡,它永远不会收到BOOT_COMPLETED意图.此外,值得注意的是,这种实现有点天真,因为它在启动时立即执行代码,这会在启动时降低用户的手机速度.因此,我建议在拦截启动意图后将执行延迟几分钟.

标签:android,notifications,alarmmanager

来源: https://codeday.me/bug/20190521/1146859.html

android 实现定时通知,在Android中创建定时通知(例如,针对事件)相关推荐

  1. php的toast,Windows通知服务:401尝试在PHP中创建Toast通知时无效令牌

    我一直在尝试向模拟器发送Toast通知. 我创建了Windows Phone 8.1应用程序,并将其与商店中的应用程序关联. 之后,我设法获取必须使用的访问令牌来调用通道URI. 当我尝试使用通道UR ...

  2. mysql 在不同数据库中创建定时同步任务,将每分钟数据转每5分钟统计

    SHOW EVENTS ; ALTER EVENT e_tdw_realtime_bid_win_ratio_tax ON COMPLETION PRESERVE DISABLE; -- 创建一个存储 ...

  3. java win10 通知_如何在Java中创建Windows通知

    我可以使用这个非常简单的示例代码成功生成此结果: import java.awt.*; import java.awt.TrayIcon.MessageType; public class TrayI ...

  4. java 前置通知_spring aop中的前置通知

    fixassetService myInterceptor myInterceptor2 在上面的配置文件中 我配置了两个interceptor ,这两个interceptor的invoke方法中的逻 ...

  5. android activity 被notification启动,Android通知Notification全面剖析

    原标题:Android通知Notification全面剖析 通知 通知是您可以在应用的常规 UI 外部向用户显示的消息.当您告知系统发出通知时,它将先以图标的形式显示在通知区域中.用户可以打开抽屉式通 ...

  6. Android应用程序组件Content Provider的共享数据更新通知机制分析

    在Android系统中,应用程序组件Content Provider为不同的应用程序实现数据共享提供了基础设施,它主要通过Binder进程间通信机制和匿名共享内存机制来实现的.关于数据共享的另一个 话 ...

  7. 【Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )

    文章目录 一.主线程中的 Handler 与 Looper 二.Handler 原理简介 一.主线程中的 Handler 与 Looper Android 系统中 , 点击图标启动一个应用进程 , 就 ...

  8. android按钮点击变化,Android实现按钮点击效果(第一次点击变色,第二次恢复)...

    1.首先创建一个按钮 android:id="@+id/click" android:layout_width="fill_parent" android:la ...

  9. 如何在geth中创建genesis.json_Adobe XD 入门教程-如何在 Adobe XD 中创建交互式原型?...

    完成屏幕设计后,您可以将各屏幕互相连接,以便直观地了解用户如何体验您的应用程序或网站.Adobe XD 允许您创建交互式原型,直观地展示如何在屏幕或线框之间导航.您可以预览交互,验证用户体验并对设计进 ...

最新文章

  1. 好玩!PyEcharts 绘制时间轮播图
  2. python 批量resize性能比较
  3. 7、MySQL设置日志输出方式
  4. sqldeveloper 连接oracle时 ora-12505 错误
  5. pytorch中的切片时的省略号
  6. MFC之COleVariant类
  7. 什么是java序列化,如何实现java序列化?
  8. 替换SAP Fiori Logo不成功的workaround
  9. mysql 主从 问题_Mysql解决主从不同步问题
  10. 小米用户画像_企鹅智库:高学历用苹果中老年用华为 男性用小米女性用OV
  11. 计算机启动过程-阮一峰
  12. thymeleaf select_SpringBoot整合thymeleaf简单的CRUD
  13. Signature字段
  14. windows8怎么关机_按下电源键后发生了什么?电脑是如何关机的?
  15. 类 ArrayBlockingQueueE(一个由数组支持的有界阻塞队列。)
  16. TCP半连接队列和全连接
  17. Axure 安装图标字体元件库
  18. FileInputStreamFileOutputStream 和 BufferedInputStreamBufferedOutputStrem的性能测试小案例
  19. php技术逻辑思维图,PHP 逻辑思维题
  20. 腾讯优图·AI 开放平台全面升级:AI 能力最全面的平台

热门文章

  1. JavaScript实现RadixSort基数排序算法(附完整源码)
  2. boost::hana::detail::create用法的测试程序
  3. boost::hana::test::TestGroup用法的测试程序
  4. boost::function模块右值的测试程序
  5. boost::throw_exception的测试程序
  6. Boost::context模块callcc的回溯测试程序
  7. Boost:双图bimap与range范围的测试程序
  8. Boost:清理cleanup测试程序
  9. ITK:像素是否在区域内
  10. OpenCV霍夫直线检测的实例(附完整代码)