AlarmManager闹钟管理者

这篇具有很好参考价值的文章主要介绍了AlarmManager闹钟管理者。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AlarmManager是Android提供的一个全局定时器,利用系统闹钟定时发送广播。这样做的好处是:如果App提前注册闹钟的广播接收器,即使App退出了,只要定时到达,App就会被唤醒响应广播事件。

AlarmManager设置的PendingIntent待定意图,只要未cancel,就会按时启动,无论程序是否关闭。

请注意,静态注册的广播接收者在即使程序关闭也依然生效;动态注册的广播接收者在程序关闭后自动注销,动态注册的广播接收者也可使用unregisterReceiver()手动注销。在Android8.0以后,只有小部分接收系统广播的广播接收者允许静态注册;其他广播接收者只能动态注册,否则收不到广播。

一、使用方法

(1) 创建用于广播的Intent(意图)

Intent intent=new Intent();
intent.setAction( "MyTestBroadcast" );

(2) 创建发送广播的PendingIntent(待定意图)

PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this,2333,intent,PendingIntent.FLAG_IMMUTABLE);

第一个参数为环境;第二个参数为请求码;第三个参数为要执行的Intent(意图);第四个参数为请求时PendingIntent已存在的解决方案。 

(3) 创建执行PendingIntent的时间

//创建Calendar
Calendar calendar=Calendar.getInstance();
//将时间设置为当前时间
calendar.setTimeInMillis(System.currentTimeMillis());
//增加时间
calendar.add(Calendar.SECOND,7);
//获取最终时间
long time=calendar.getTimeInMillis();

(4) 创建AlarmManager并设置PendingIntent

//创建AlarmManager闹钟管理者
AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
//设置闹钟
alarmManager.set(AlarmManager.RTC_WAKEUP,time,pendingIntent);

alarmManager.set()方法的参数:第一个参数为闹钟类型,第二个参数为long型的执行PendingIntent的时间,第三个参数为到达时间后执行的PendingIntent。

二、闹钟类型

(1) ELAPSED_REALTIME : 以手机开机时间为基准。

(2) ELAPSED_REALTIME_WAKEUP : 以手机开机时间为基准,并且可以在休眠时发出广播

(3) RTC : 以UTC标准时间为基准。

(4) RTC_WAKEUP 【常用】:以 UTC标准时间为基准,并且可以在休眠时发出广播

三、使用AlarmManager

//创建Intent意图,用于发送广播
Intent intent=new Intent().setAction("MyTestBroadcast");
//根据Intent意图创建PendingIntent等待意图
PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this,2333,intent,PendingIntent.FLAG_IMMUTABLE);

//获取执行时间
//创建Calendar
Calendar calendar=Calendar.getInstance();
//将时间设置为当前时间
calendar.setTimeInMillis(System.currentTimeMillis());
//增加时间
calendar.add(Calendar.SECOND,7);
//获取最终时间
long time=calendar.getTimeInMillis();

//创建AlarmManager闹钟管理者
AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
//设置闹钟
alarmManager.set(AlarmManager.RTC_WAKEUP,time,pendingIntent);

四、例子

1.创建广播接收者

AndroidManifest.xml清单文件

<application
    ......>

    <receiver
        android:name=".MyBroadcastReceiver"
        android:enabled="true"
        android:exported="true"></receiver>


    <activity
        ......>
        ......
    </activity>
</application>

MyBroadcastReceiver.java文件

public class MyBroadcastReceiver extends BroadcastReceiver{
    private Context context;
    public MyBroadcastReceiver(Context context){
        this.context=context;
    }
    public void onReceive(Context context, Intent intent) {
        //广播接收者
        NotificationManager notificationManager= (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel notificationChannel=new NotificationChannel("id","name",NotificationManager.IMPORTANCE_HIGH);
            notificationManager.createNotificationChannel(notificationChannel);
        }
        Notification.Builder builder=new Notification.Builder(context);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            builder.setChannelId("id");
        }
        builder.setContentText("接收到广播");
        builder.setSmallIcon(R.drawable.icon2);
        builder.setWhen(System.currentTimeMillis());
        builder.setAutoCancel(true);
        Notification notification=builder.build();
        notificationManager.notify(2333,notification);
    }
}

2.注册广播接收者&&设置定时发送广播闹钟

MainActivity.java文件文章来源地址https://www.toymoban.com/news/detail-740674.html

public class MainActivity extends AppCompatActivity {
    private MyBroadcastReceiver myBroadcastReceiver;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //注册广播接收者-接收"MyTestBroadcast"广播
        myBroadcastReceiver=new MyBroadcastReceiver(MainActivity.this);
        IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction("MyTestBroadcast");
        registerReceiver(myBroadcastReceiver,intentFilter);

        //获取控件
        Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                //创建Intent意图,用于发送广播
                Intent intent=new Intent().setAction("MyTestBroadcast");
                //根据Intent意图创建PendingIntent等待意图
                PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this,2333,intent,PendingIntent.FLAG_IMMUTABLE);

                //获取执行时间
                //创建Calendar
                Calendar calendar=Calendar.getInstance();
                //将时间设置为当前时间
                calendar.setTimeInMillis(System.currentTimeMillis());
                //增加时间
                calendar.add(Calendar.SECOND,7);
                //获取最终时间
                long time=calendar.getTimeInMillis();

                //创建AlarmManager闹钟管理者
                AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
                //设置闹钟
                alarmManager.set(AlarmManager.RTC_WAKEUP,time,pendingIntent);


                //销毁页面
                MainActivity.this.finish();
            }
        });

    }

    protected void onDestroy() {
        super.onDestroy();
        // 不 注销广播接收者
        if(myBroadcastReceiver!=null){
            //unregisterReceiver(myBroadcastReceiver);
        }
    }
}

到了这里,关于AlarmManager闹钟管理者的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MokaPeople 上线 300 天:主打管理者视角和全员体验

    当前,我们是身处的时代已从 VUCA 向 BANI 转变,在政策、经济和技术等多方面因素的驱动下,数字化转型已成为企业发展的必然趋势。 尤其在当下对于人才环境中的竞争态势也不得不迫使 HR 转型也进入了关键性的时刻。 6 月 2 日,国内领先的 HRSaaS 企业 Moka 在上线核心人事产

    2024年02月07日
    浏览(41)
  • [管理与领导-59]:IT基层管理者 - 辅助技能 - 2 - 进行员工转正手续与面谈?

    目录 一、员工员工转正手续 二、试用期绩效评估 三、试用期评估指标(转正申请) 四、研发工位试用期评估指标 五、员工转正面谈 员工转正手续可能因所在国家和公司政策而有所不同,以下是一般情况下的员工转正手续: 评估员工表现: 在试用期结束前, 人力资源部或

    2024年02月11日
    浏览(29)
  • [管理与领导-56]:IT基层管理者 - 扩展技能 - 1 - 时间管理 -3- 帮助下属提升效能(辅导与激励)

    对下属的辅导是管理者一个重要的职责,帮助下属者提升时间效能也辅导下属的一个职责。 管理者与下属,管理者与团队是“共生”的关系,管理者提升下属的时间效能,就是提升团队的效能,也就是提升了自己的效能。 针对不同的类型的下属,提升效能的方式是不同的,

    2024年02月11日
    浏览(33)
  • 高层管理者应向 CISO 提出哪些有关公司安全的问题

    不可接受的信息安全事件:Positive Technologies 案例研究 在首席信息安全官和高层管理代表的共同努力下,Positive Technologies 公司形成并建立了自己的防御战略。随着业务的发展,公司成功地从大量抽象的网络风险转变为三个关键的不可接受的信息安全事件: 1.         在

    2024年02月04日
    浏览(39)
  • 如何通过git指令加入管理者仓库并提交分支(Github Gitee)

    GitHub: https://github.com/ Gitee : https://gitee.com/ 打开对应的网站之后可以直接通过邮箱创建账户 下载git 安装地址: https://git-scm.com/download 安装Git后右键桌面可显示 Git Bash 和 Git GUI Git GUI: Git提供的图形界面工具 Git Bash: Git提供的命令行工具 git基础配置 右键打开Git Bash输入 gi

    2024年02月07日
    浏览(42)
  • [管理与领导-66]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 乌卡时代(VUCA )的团队管理思维方式的转变

    目录 一、乌卡时代人与公司的关系的转变 二、乌卡时代管理方式的转变 三、乌卡时代的管理与传统时代的管理比较 四、乌卡时代管理者的挑战 五、乌卡时代如何做好管理 六、个人能力要求 在乌卡时代( 指虚拟办公、远程工作等数字化工作方式普遍的时代 )中,人与公司

    2024年02月10日
    浏览(41)
  • [管理与领导-85]:IT基层管理者 - 核心技能 - 高效执行力 - 10 - 高效执行力的9个段位

    目录 前言: 一段:准确执行,快速反应,坚决执行 (态度很重要) 二段:结果导向 苦劳过后,有功劳(有结果很重要) 三段:有始有终 主动反馈、有始有终、即时汇报、不断改进(持续很重要) 四段:结果到位  做事提前量,超越期望 (提前和可预期很重要) 五段:统

    2024年02月09日
    浏览(31)
  • [管理与领导-37]:IT基层管理者 - 人的管理 - 上次让对方赢是什么时候?赢了事情,输了人心;争得理,输了情。

    好的管理者要懂得谦逊、懂得容人、懂得给别人留情面。 很多管理者赢了事情,输了人心;争得理,输了情。 管理者的\\\"中庸之道\\\"可以理解为在管理和领导团队时保持平衡和适度的原则。中庸之道的核心思想是避免极端、求取平衡,能够在不同的情况下采取合适的方式。以下

    2024年02月12日
    浏览(51)
  • AI大模型时代,开发工程师与项目管理者面对的机遇和挑战,文末送书3本

    🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:PHP进阶实战教程,评测专区。 🎉欢迎 👍点赞✍

    2024年02月08日
    浏览(68)
  • Android Alarm闹钟API使用心得

    有什么办法可以在不打开App的时候,也能够触发一些操作呢?比如说发送通知,解决这个需求的办法有很多种选择,比如说官方推荐的WorkManager API,可以在后台执行一次性、耗时、定时的任务,但WorkManager是严格遵循电池优化策略的,也就是并不精准,虽然你可以设置为加急

    2024年02月12日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包