Android定时发送短信完整详细示例
发布日期:2021-06-30 11:14:41
浏览次数:2
分类:技术文章
本文共 7463 字,大约阅读时间需要 24 分钟。
MainActivity如下:
package cc.testsms;import java.util.Calendar;import java.util.Locale;import android.app.Activity;import android.app.AlarmManager;import android.app.DatePickerDialog;import android.app.Dialog;import android.app.PendingIntent;import android.app.TimePickerDialog;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.Button;import android.widget.DatePicker;import android.widget.EditText;import android.widget.TimePicker;import android.widget.Toast;/** * Demo描述: * 手机定时发送短信的实现 * * 参考资料: * 1 http://blog.csdn.net/pku_android/article/details/7548385 * 2 http://blog.csdn.net/zjbpku/article/details/7577590 * Thank you very much * * 暂存问题: * 1 设置定时短信后关机重启,定时短信失效 * 可以考虑将定时短信存入数据库或者本地 * 2 连续多次设置定时短信,但只有最后一个会被触发. * 解决方式可以参见闹钟的源码. */public class MainActivity extends Activity { public int year; public int month; public int day; public int hour; public int minute; public int timedYear; public int timedMonth; public int timedDay; public int timedHour; public int timedMinute; private Context mContext; public Calendar calendar; private Button mDatePickerButton; private Button mTimePickerButton; private EditText mContentEditText; private Button mSendButton; private Button mCancelButton; public final static int DATE_PICKER = 9527; public final static int TIME_PICKER = 9528; public DatePickerDialog mDatePickerDialog; public TimePickerDialog mTimePickerDialog; private PendingIntent mTimedMessagePendingIntent=null; private DatePickerDialog.OnDateSetListener mDateSetListener; private TimePickerDialog.OnTimeSetListener mTimeSetListener; public boolean isCreatePickerDialog = true; private AlarmManager mAlarmManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init() { mContext=this; mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); mContentEditText = (EditText) findViewById(R.id.contentEditText); mSendButton = (Button) findViewById(R.id.sendButton); mSendButton.setOnClickListener(new OnClickListenerImpl()); mDatePickerButton = (Button) findViewById(R.id.datePickButton); mDatePickerButton.setOnClickListener(new OnClickListenerImpl()); mTimePickerButton = (Button) findViewById(R.id.timePickButton); mTimePickerButton.setOnClickListener(new OnClickListenerImpl()); mCancelButton=(Button) findViewById(R.id.cancelButton); mCancelButton.setOnClickListener(new OnClickListenerImpl()); // 监听DatePicker的set按钮 mDateSetListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) { //保存定时短信的年月日 System.out.println("---> DatePicker设置后: year=" + year + ", month="+ monthOfYear + ",day=" + dayOfMonth); timedYear=year; timedMonth=monthOfYear; timedDay=dayOfMonth; } }; // 监听TimePicker的set按钮 mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { //保存定时短信的时分 System.out.println("---> TimePicker设置后: hour=" + hourOfDay + ",minute="+ minute); timedHour=hourOfDay; timedMinute=minute; } }; } private class OnClickListenerImpl implements View.OnClickListener { @Override public void onClick(View v) { switch (v.getId()) { case R.id.datePickButton: showDialog(DATE_PICKER); break; case R.id.timePickButton: showDialog(TIME_PICKER); break; case R.id.sendButton: sendTimedMessage(); break; case R.id.cancelButton: cancelTiimedMessage(); break; default: break; } } } // 覆写Activty的onCreateDialog(int id)方法 // 注意: // 1 第一次显示pickerDialog的时候会调用onCreateDialog()和onPrepareDialog() // 2 随后每次只会调用onPrepareDialog()方法 // 所以需要在onPrepareDialog()方法中获取最新时间再设置 @Override protected Dialog onCreateDialog(int id) { getCurrentTime(); switch (id) { case DATE_PICKER: mDatePickerDialog = new DatePickerDialog(this, mDateSetListener,year, month, day); return mDatePickerDialog; case TIME_PICKER: mTimePickerDialog = new TimePickerDialog(this, mTimeSetListener,hour, minute, true); return mTimePickerDialog; default: break; } return super.onCreateDialog(id); } // 覆写Activty的onPrepareDialog(int id, Dialog dialog)方法 @Override protected void onPrepareDialog(int id, Dialog dialog) { super.onPrepareDialog(id, dialog); if (!isCreatePickerDialog) { getCurrentTime(); switch (id) { case DATE_PICKER: mDatePickerDialog.updateDate(year, month, day); break; case TIME_PICKER: mTimePickerDialog.updateTime(hour, minute); break; default: break; } } isCreatePickerDialog = false; } //发送定时短信 private void sendTimedMessage() { String content = mContentEditText.getText().toString(); if (!TextUtils.isEmpty(content)) { Intent intent=new Intent(this,AlarmBroadcastReceiver.class); intent.setAction("alarmBroadcastReceiverAction"); intent.putExtra("content", content); mTimedMessagePendingIntent=PendingIntent.getBroadcast(this, 0, intent, 0); //设置定时时间 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, timedYear); calendar.set(Calendar.MONTH, timedMonth); calendar.set(Calendar.DAY_OF_MONTH, timedDay); calendar.set(Calendar.HOUR_OF_DAY, timedHour); calendar.set(Calendar.MINUTE, timedMinute); if (calendar.getTimeInMillis()<=System.currentTimeMillis()) { Toast.makeText(mContext, "请重新设置时间", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(mContext, "成功设置定时短信", Toast.LENGTH_SHORT).show(); mAlarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), mTimedMessagePendingIntent); } } } //取消定时短信 private void cancelTiimedMessage(){ if(mTimedMessagePendingIntent!=null){ mAlarmManager.cancel(mTimedMessagePendingIntent); Toast.makeText(mContext, "取消定时短信", Toast.LENGTH_SHORT).show(); } } private void getCurrentTime() { // 设置时间为中国 calendar = Calendar.getInstance(Locale.CHINA); // 获取日期 year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH); day = calendar.get(Calendar.DAY_OF_MONTH); hour = calendar.get(Calendar.HOUR_OF_DAY); minute = calendar.get(Calendar.MINUTE); System.out.println("-----> 获取当前时间 year=" + year + ",month=" + month+ ",day=" + day + ",hour=" + hour + ",minute=" + minute); }}AlarmBroadcastReceiver如下:
package cc.testsms;import java.util.ArrayList;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.telephony.SmsManager;import android.widget.Toast;public class AlarmBroadcastReceiver extends BroadcastReceiver{ private final String TELPHONE_NUMBER="10086"; @Override public void onReceive(Context context, Intent intent) { SmsManager manager = SmsManager.getDefault(); String content=intent.getStringExtra("content"); System.out.println("-----> 收到广播 content="+content); ArrayListAndroidManifest.xml如下:messages = manager.divideMessage(content); for (String everyMessage : messages) { manager.sendTextMessage(TELPHONE_NUMBER, null, everyMessage, null,null); } Toast.makeText(context, "已经发送定时短信", Toast.LENGTH_SHORT).show(); }}
main.xml如下:
转载地址:https://it9527.blog.csdn.net/article/details/20606481 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月09日 19时17分39秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java各种锁
2019-04-30
清晰理解红黑树的演变
2019-04-30
红黑树插入删除
2019-04-30
红黑树代码
2019-04-30
cmd
2019-04-30
redis安装
2019-04-30
Mysql常见的存储引擎及比较
2019-04-30
android Context家族及详解
2019-04-30
android CrashHandler处理异常
2019-04-30
android 问题小记
2019-04-30
android productFlavors多马甲打包
2019-04-30
android 搭建本地maven库
2019-04-30
android mac搭建Nexus3.+私有maven
2019-04-30
android RecyclerView实现柱状图
2019-04-30
OPPO崩溃问题解决
2019-04-30
Glide4.0+使用
2019-04-30
Glide遇到的问题与解决方法
2019-04-30
记ViewStub的一个问题
2019-04-30
okhttp实现连接池原理
2019-04-30
android LeakCanary原理解析
2019-04-30