定时发送短信之AlarmManage,SmsManger的使用

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

学习定时发送短息,结果了看了好几个帖子,都介绍的好简单,自己照着弄了下,总是不成功,后来终于找到原因了。还是AlarmManage的使用有问题。。

首先获取一个闹铃管理对象

AlarmManager alarm=(AlarmManager) getSystemService(ALARM_SERVICE);

之后介绍他的方法

❑ void set(int type, long triggerAtTime, PendingIntent operation)
设置一个闹钟

❑ void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
设置一个会重复的闹钟

❑ void setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
设置一个重复闹钟的不精确版本,它相对而言更节能(power-efficient)一些,因为系统可能会将几个差不多的闹钟合并为一个来执行,减少设备的唤醒次数。
内置的几个interval为:
INTERVAL_FIFTEEN_MINUTES
INTERVAL_HALF_HOUR
INTERVAL_HOUR
INTERVAL_HALF_DAY
INTERVAL_DAY
如果你将其设为DAY,那么可能这一天中的所有闹钟都会被合并掉。

❑ void cancel(PendingIntent operation)
取消一个设置的闹钟

❑ void setTimeZone(String timeZone)
设置系统的默认时区。需要android.permission.SET_TIME_ZONE权限

======

下边来介绍方法里的参数

❑ ELAPSED_REALTIME
在指定的延时过后,发送广播,但不唤醒设备。

❑ ELAPSED_REALTIME_WAKEUP
在指定的延迟后,发送广播,并唤醒设备
该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时间,可以通过调用SystemClock.elapsedRealtime()获得


❑ RTC
在指定的时刻,发送广播,但不唤醒设备

❑ RTC_WAKEUP
在指定的时刻,发送广播,并唤醒设备

该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用 System.currentTimeMillis()获得

简单举例如下:5秒钟后发送一条广播

AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);   
Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);   
int requestCode = 0;   
PendingIntent pendIntent = PendingIntent.getBroadcast(getApplicationContext(),   
        requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);   
// 5秒后发送广播,只发送一次  我们用的时间都是long类型的毫秒值 
int triggerAtTime = SystemClock.elapsedRealtime() + 5 * 1000;   
alarmMgr.set(AlarmManager.ELAPSED_REALTIME, triggerAtTime, pendIntent);  
如果是重复发送的,修改最后一行代码如下,5秒后发送一条广播,之后每隔10秒再发送一次。。
//alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, 10*1000, pendIntent); 
取消闹铃的话执行如下操作:
alarmMgr.cancel(pendIntent);
// 与上面的intent匹配(filterEquals(intent))的闹钟会被取消   

上边的看懂了的话,实现自动发送短信就简单那了,首先记得清单文件里添加发送短信的权限SEND_SMS,之后就是接收到广播以后将短信发送出去。

下边两句可以将短信发送出去,num为号码,s为短信内容。。。sendintent就是PendingIntent可以省略写为null,额外说明下,安卓发送短信是有字数限制的,带中文的只能发送70个,英文是160个,所以短信字数超标后得做处理。SmsManager有个方法可以分割短信的,至于如何区分中英文,没研究过,默认都做中文处理,以后有空再研究这个,或者哪个大师知道的话回帖告诉我下,谢了先。

SmsManager manger = SmsManager.getDefault();

manger.sendTextMessage(num, null, s, sendintent, null);

====本人写的小程序定时的获取过程。。

首先通过对话框获取用户选择的时间,比如

riqi="2013-8-2 :15:30:000";

SimpleDateFormat  format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

alarmManger.set(AlarmManager.RTC,format.parse(riqi).getTime(), operation);//operation为Pendingintent的一个实例

其他一些时间的获取处理,感觉会处理时间就简单多了

//设定一个五秒后的时间
    Calendar calendar=Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 5);
    
    AlarmManager alarm=(AlarmManager)getSystemService(ALARM_SERVICE);
    alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
    //或者以下面方式简化
    //alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5*1000, sender);


 

 

PendingIntent额外知识:除了可以获取广播外,还能获得activity,service。

开发者可以通过调用getActivity(Context, int, Intent, int)

getBroadcast(Context, int, Intent, int)

getService(Context, int, Intent, int)

三种不同方式来得到一个PendingIntent实例。

其中:getActivity——通过该函数获得的PendingIntent可以直接启动新的activity, 就像调用 Context.startActivity(Intent)一样.不过值得注意的是要想这个新的Activity不再是当前进程存在的Activity 时。我们在intent中必须使用Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

 

======

Android中的Alarm在设备处于睡眠模式时仍保持活跃,它可以设置来唤醒设备;然而,所有的Alarm在设备重启时都会被取消

为了创建一个新的Alarm,使用set方法并指定一个Alarm类型、触发时间和在Alarm触发时要调用的Intent。如果你设定的Alarm发生在过去,那么,它将立即触发。

定时任务——发送短信验证码时效5分钟 public void send() throws IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException { String phone = getPara(“phone”); int random = (int) ((Math.random() * 9 + 1) * 100000); Str... 阅读详情

相关推荐

5分钟搞定 AlertManager 接入短信、语音等10+种通知渠道

SLS告警管理 AlertManager作为Prometheus生态系统的一员,提供了包括静默、抑制、通知在内的多种告警管理服务。同时AlertManager在实际使用中还存在着或多或少的不足,例如通知渠道过少,规则配置过程繁琐。 阿里云日志服务为了解决告警的通知、管理等问题,推出了日志服务告警中心,为客户提供了一站式的告警解决方案。下图中的功能对比给出了SLS告警和AlertManager+Prometheus生态的功能对比,可以看出SLS告警提供了企业级的服务,能够极大的方便用户的工作。 SL

数据库技术 1125

Alertmanager webhook短信告警

此webbook仅供参考 # url: 换成你自己的sms api # params: 你的api的POST数据 # phone_l: 接收短信的手机号 #!/usr/bin/env python # -*- coding: utf-8 -*- from flask import Flask, request import urllib import urllib2 import json import sys app = Flask(__name__) reload(sys) s.

背锅浩的博客 4262

定时短信的实现

定时发送短信主要依赖AlarmManager以及SmsManager配置xml<!-- 闹钟广播 --> <receiver android:name="com.chenggongyun.receiver.AlarmReceiver" android:permission="android.provider.Telephony.SMS_RECEIVED"

刘健宁的博客 871

android alarmmanager 定时 不准确,关于安卓AlarmManager定时会失效的问题,请大神指教!...

网上查了N多资料,基本都是讲解AlarmManager要怎么用,但基本没怎么说什么情况会失效或被安卓系统杀掉。都说AlarmManager是系统级的服务,手机睡眠后都能唤醒CPU执行。但我测试在手机不休眠时能正常功能,一旦休眠后过几个小时后不再重复定时执行。我写了写入数据库的日志,从日志可以清晰看到定时服务确实没再执行过。下面是我的代码,请大神指教啊!在服务的onCreate方法中启动定时发送广播...

weixin_28676181的博客 1555

android 拦截闹钟通知,AlarmManager+Notification实现定时通知提醒功能

AlarmManager简介AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒功能。闹钟配置周期闹钟Intent intent = new Intent();intent.setActio...

weixin_30562977的博客 737

Android---AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作

AlarmManager使用机制有的称呼为全局定时器,有的称呼为闹钟。通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作 AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service. 下面的代码详...

amsogu6822的博客 293

Android定时发送短信功能实现

现在好多手机都自带定时短信,但是感觉定时发送这个功能里面有结合alarm和广播两部分内容,所以小小记录一下。 首先,定时短信无非就是“定时”和“发短信”两部分,那么分开来看。 第一部分:发短信 很简单,定时短信肯定不是到时间了再弹出短信编辑界面,所以那种方法就不说了,在此只记录直接发方法。 SmsManager manager = SmsManager.getDefault(); ...

WHY_HelloWorld的博客 6786

springboot定时发送短信_SpringBoot+Vue+ElementUI实现后台管理系统模板(附代码地址)...

一、SpringBoot 整合阿里云服务 -- 短信服务1、简介  短信服务(Short Message Service)是指通过调用短信发送API,将指定短信内容发送给指定手机用户。短信的内容多用于企业向用户传递验证码、系统通知、会员服务等信息。2、开通短信服务(1)进入阿里云官网,找到 短信服务【官网地址:】 https://www.aliyun.com/【官方文档:】 https...

weixin_42361666的博客 961

Android_AlarmManage定时发送短信

对应AlarmManage有一个AlarmManagerServie服务程序,该服务程序才是正真提供闹铃服务的,它主要维护应用程序注册下来的各类闹铃并适时的设置即将触发的闹铃给闹铃设备(在系统中,linux实现的设备名为”/dev/alarm”),并且一直监听闹铃设备,一旦有闹铃触发或者是闹铃事件发生,AlarmManagerServie服务程序就会遍历闹铃列表找到相应的注册闹铃并发出广播...

weixin_30553777的博客 200

Android开发之SmsManager(短信管理器)详解

SmsManager是Android提供的另一个非常常见的服务,SmsManager提供了系列sendXxxMessage()方法用于发送短信SmsManager:管理短信操作,如发送数据,文本和PDU短信。通过调用静态方法SmsManager.getDefault()获取此对象。

fengyuzhengfan的专栏 7951

让您做一个电商平台,您如何设置一个在买家下订单后的”第60秒“发短信通知卖家发货,您需要考虑的是 像淘宝一样的大并发量的订单。

个人记录:2018年,工作的第6到7个年头。重点研究自己不太擅长的技术:分布式、高并发、大数据量、数据库优化、高性能、负载均衡等。问题源头:http://ifeve.com/question/%e5%85%b3%e4%ba%8e%e6%b7%98%e7%82%b9%e7%82%b9%e9%9d%a2%e8%af%95%e4%b8%ad%e7%a2%b0%e5%88%b0%e7%9a%84%e6%9...

AI一人公司实践中,AI全栈程序员,编程-产品-营销 4073

java定时发送短信_java实现指定时间触发一个事件(比如定时发送短信)

package com.huawei.dm.datasource.system; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Test { public static void mai...

weixin_35474542的博客 1723

Android AlarmManager的一些问题

我在设置时钟的时候遇到一点问题 我开始的代码是这样写的 alarmManager.set(AlarmManager.RTC_WAKEUP, (5*1000), sender);   我的本意是设定五秒后启动闹钟 但是每次都是我设置完闹钟之后立马就启动了。 后来我发现问题出在第二个参数上 我对他的理解是错误的 type One of ELAPSED_REALTIME, ELAPS...

464

大话AlarmManage

1、AlarmManager,顾名思义,就是“提醒”,就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,通常我们使用 PendingIntent,PendingIntent可以理解为Intent的封装包,简单的说就是在Intent上在加个指定的动作。在使用Intent的时候,我们还需要在执行startActivity、startService或s

凹凸曼的专栏 876

java定时定时短信_quartz-job实现实时或定时发送短信任务(示例代码)

存放调度器(Job 和 Trigger)信息的xml配置文件:这是某个指定的要实现的定时任务:SendToManagerJobcom.xxx.cscns.sms.SendToManagerJobSendToManagerJobSendToManagerJob0 30 8 * * ?这是一个实时执行的任务服务,负责推送系统数据库短信信息表中的数据给运营商的接口完成发送短信操作:ReceiveMess...

weixin_29173299的博客 1649

第三方授权登录补充1

上篇大概讲述了如何实现第三方登录,并获取登陆的基本信息。 下边记录下碰到的问题,首先,就是打包或安装的时候会出错,提示strings.xml这个文件缺少对应的英文版本。这个可难倒我了,咱总不能再写个英文版本的吧。 简单的咋办了?把values-en 这个目录删除掉好了。彻底不好英文版本的。 其次来说说我用到的平台的问题。 第一个,新浪微博,这个申请的时候除了填写应用的基本信息外,还得填好如

老男孩的网络笔记本 1万+

android中通过AnimationDrawable实现动画背景图片

首先创建一个XML文件,里边有很多张图片,记得type类型选择 drawable。 root element选择如下的animation-list <!-- Animation frames are wheel0.png -- wheel5.png files inside the res/drawable/ folder -->

老男孩的网络笔记本 3601

第三方授权登陆

第三登陆如果用每个平台的sdk的话感觉太累,刚好有免费的集成 了很多平台授权登陆的一个sdk, 就用这个了。。地址如下:http://sharesdk.cn/ @1首先,我们要做的就是在这个网站注册一个账号,获取到ShareSDK的Appkey。这个后边要用到。 之后,我们要到我们需要的第三方平台那里注册为开发者,然后添加应用,就能获取到如下的2个值 App Key:801493335

老男孩的网络笔记本 2663
上一篇: activity的子类使用:launcheractivity和preferenceactivity
下一篇: android中如何实现开机启动某些服务,activity等
29boy
博客等级 码龄17年 7粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值