Android定时发送短信功能实现
来源:互联网 发布:淘宝代购衣服专柜真假 编辑:程序博客网 时间:2024/05/07 00:07
现在好多手机都自带定时发短信,但是感觉定时发送这个功能里面有结合alarm和广播两部分内容,所以小小记录一下。
首先,定时发短信无非就是“定时”和“发短信”两部分,那么分开来看。
第一部分:发短信
很简单,定时发短信肯定不是到时间了再弹出短信编辑界面,所以那种方法就不说了,在此只记录直接发方法。
SmsManager manager = SmsManager.getDefault();List<String> divideContents = manager.divideMessage(content); for (String text : divideContents) { manager.sendTextMessage(tel, null, text, null, null); }
核心得代码只有这几行。divideMessage(String msg)方法主要是发短信是有字数限制的,这是用来divide你短信内容用的。最关键的是这个方法
sendTextMessage(tel, null, text, null, null)一共5个参数,第一,三参数一看就知道,一个是手机号一个是发送的文本,第二个参数是短信中心服务号码, 这里设置为null (我也没设过值,短信也可以正常发),最后两个参数比较重要,PendingIntent类型,用来监听短信是否发送成功和对方是否接收成功的,直接看代码。
String SENT_SMS_ACTION = "SENT_SMS_ACTION"; String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION"; Intent sentIntent = new Intent(SENT_SMS_ACTION); Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION); PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent, 0); PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0, deliverIntent, 0); context.registerReceiver(sentBroadcast, new IntentFilter(SENT_SMS_ACTION)); context.registerReceiver(receiveSMS, new IntentFilter(DELIVERED_SMS_ACTION));
context就不说了,sentBroadcast和receiveSMS是两个广播(其实不说也能看出来。。),在这就可以做你想做的处理了。private BroadcastReceiver sentBroadcast = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: Utils.showToast(context, "短信发送成功"); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Utils.showToast(context, "RESULT_ERROR_GENERIC_FAILURE"); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Utils.showToast(context, "RESULT_ERROR_RADIO_OFF"); break; case SmsManager.RESULT_ERROR_NULL_PDU: Utils.showToast(context, "RESULT_ERROR_NULL_PDU"); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Utils.showToast(context, "RESULT_ERROR_NO_SERVICE"); break; } } }; private BroadcastReceiver receiveSMS = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Utils.showToast(context, "收信人已经成功接收"); } };上面代码很清楚了就不多说了。这部分就是发短信的部分。下面开始讲“定时”部分。
第二部分:定时
最最关键的一行代码
mAlarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), mTimedMessagePendingIntent);
挨个部分看下,mAlarmManager:在Android系统中,闹钟和唤醒功能都是由Alarm Manager Service(ALMS)控制并管理的。他本身是一个服务,是通过AlarmManager这个辅助类来跟我们程序打交道的,这个mAlarmManager就是AlarmManager的一个对象
mAlarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
set方法作为设置一次性闹钟的方法其中的参数我们来挨个看一下。第一个参数:一共有四个值,这四个值分为两类,这两类决定了第二个参数的写法。
1) RTC_WAKEUP
2) RTC
3) ELAPSED_REALTIME_WAKEUP
4) ELAPSED_REALTIME
带RTC的两个参数是以1970.1.1这个日期为基准,第二个参数的时间是以这个UTC时间为基准;
带ELAPSED的两个参数是以SystemClock.elapsedRealtime()这个时间为基准;
带WAKEUP的两个参数是在系统休眠的状态下,仍可以唤醒系统而实现闹钟的功能。
第二个参数:需要配合第一个参数进行使用
第二个参数一定是在基准时间基础之上你想设置让它闹钟的时间。以RTC打个比方,你通过System.currentTimeMillis()这个方法得到了一个值,比如说是10000(就是打个比方。。)那么这个时候你在第二个参数位置假设给70000,那么就是说闹钟会在1分钟之后生效(1分钟60000毫秒)。知道第二个参数是什么意思就好了,一般这个位置直接填你想让它几点响就行calendar.getTimeInMillis(),calendar就是你想让他在几年几月几日几点几分响的这个时间。
第三个参数:与广播联系起来的重要参数
第三个参数是一个PendingIntent
Intent intent = new Intent(this, AlarmBroadcastReceiver.class); intent.setAction("alarmBroadcastReceiverAction"); intent.putExtra("content", content); intent.putExtra("telephone", telephone); PendingIntent mTimedMessagePendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
具体什么是PendingIntent,参考这篇文章,本文不细说了。有了以上的几个部分,一整合基本就可以实现闹钟的功能了,至于BroadcastReceiver怎么弄这个就很简单了,本文也不在赘述。 - Android定时发送短信功能实现
- android 定时发送短信实现
- android实现短信发送功能
- android 实现发送短信功能
- android实现发送短信的功能
- android小功能实现之发送短信
- Android实现发送短信的功能
- Android----实现短信发送器功能
- Android 发送短信功能
- android 发送短信功能
- 使用spring-quartz 定时发送短信功能
- Android实现发送短信
- Android实现发送短信
- Android发送短信的功能
- Android自定义发送短信功能
- 举例说明android如何实现发送短信的功能
- android两种方式实现发送短信的功能代码
- Android学习之1:实现发送短信功能
- hive搭建以及使用与简介(这里就介绍最简单的嵌入式了)
- Spring mvc
- java设计模式之单例模式
- 未能从程序集“System.ServiceModel, Version=3.0.0.0..."中加载类型“System.ServiceModel.Activation.HttpModule”
- MYSQL常用操作
- Android定时发送短信功能实现
- Linux CCF框架简要分析和API调用
- iOS开发之Block详解
- P2P中NAT之间的打洞可能性
- scsi、cifs、nfs在存储上的区别
- Oracle字符串操作 、 Oracle数值操作 、 Oracle日期操作 、 空值操作
- Java中关键字continue、break和return的区别
- 策略模式(转)
- 安装Django后,执行django-admin.py无法创建工程的解决办法