Andorid定时发短信

在android开发中经常需要调用系统内置的功能来发送短信,或者读取短信内容(如:提取短信验证码)。android中要实现发短信功能,必须要用到android系统中发短信的权限,即在AndoridManifest.xml中添加发送短信权限。

在android开发中经常需要调用系统内置的功能来发送短信,或者读取短信内容(如:提取短信验证码)。android中要实现发短信功能,必须要用到android系统中发短信的权限,即在AndoridManifest.xml中添加发送短信权限。如下:

<uses-permission android:name=”android.permission.SEND_SMS” />

我们可以使用AlarmManager来实现一个倒计时的功能,当时间到时发送短信。AlarmManager有两个相似的用法:

  • 在指定时常时候执行某项操作

  • 周期性的执行某项操作

AlarmManager类

AlarmManager对象需要配合Intent对象使用,可以定时开启一个Activity,发送一个Broadcast,或者开启一个Service。以下是核心代码片段:

AlarmManager aManager = (AlarmManager) getSystemService( Context.ALARM_SERVICE );
Intent intent = new Intent(this, AlarmReceiver.class);
intent.setAction( "AlarmReceiver" );

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
// aManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
aManager.setRepeating(AlarmManager.RTC, 0, 60*1000, pendingIntent)

实现时间的设定方式

  • 可以直接使用AlarmManager对象的set方法来设定具体的闹钟时间。

  • 可以使用TImePicker的方式来设定时间,这种方式比较灵活。

实例代码

1、现在AndroidMainfest.xml里添加Receiver的声明

<receiver  android:name=".AlarmReceiver"  android:label="@string/app_name">   
    <intent-filter>
        <action android:name="AlarmReceiver" />
    </intent-filter>
</receiver>

在AlarmReceiver.java中实现对时间的获取以及发送短信的功能。发送短信需要用到SmsManager类,利用类 SmsManager 发送信息, smsManager 为 SmsManager 一个默认的实例。

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);

其中各个参数的含义如下

destinationAddress    收件人号码

scAddress    短信中心服务号码, 这里设置为null

text     发送内容

sentIntent   发送短信结果状态信号(是否成功发送),new 一个Intent , 操作系统接收到信号后将广播这个Intent.此过程为异步.

deliveryIntent   对方接收状态信号(是否已成功接收).

最后附上详细的代码,如下:

public class YoulainaozhongActivity extends Activity {
    TextView onetextview;
    TextView twotextview;
    TextView threetextview;
    Button onebutton;
    Button twobutton;
    Dialog dialog = null;
    //新建日历对象,用来设置闹钟时间
    Calendar calendar = Calendar.getInstance();
    private SharedPreferences sharedPreferences;
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        calendar.setTimeInMillis(System.currentTimeMillis());
         
        LinearLayout relativeLayout =(LinearLayout) findViewById(R.id.LinearLayout);
        relativeLayout.setBackgroundResource(R.drawable.bejing);
         
        onebutton = (Button) findViewById(R.id.onebutton);
        onebutton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog();
            }
        });
        twobutton = (Button) findViewById(R.id.twobutton);
        twobutton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        onetextview = (TextView) findViewById(R.id.onetextview);
        twotextview = (TextView) findViewById(R.id.twotextview);
        threetextview = (TextView) findViewById(R.id.threetextview);
        sharedPreferences = getSharedPreferences("alarm_record",  Activity.MODE_PRIVATE);
        AlarmManager aManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
 
        Intent intent = new Intent(this, AlarmReceiver.class);
        intent.setAction("AlarmReceiver");
 
        PendingIntent pendingIntent=PendingIntent.getBroadcast(this, 0, intent, 0);
//      aManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
        aManager.setRepeating(AlarmManager.RTC, 0, 60*1000, pendingIntent);
    }
    
    public void dialog(){
        View view=getLayoutInflater().inflate(R.layout.shijian, null);
        final TimePicker timePicker=(TimePicker)view.findViewById(R.id.timepicker);
        final EditText oneeditext=(EditText)view.findViewById(R.id.oneeditext);
        final EditText twoeditext=(EditText)view.findViewById(R.id.twoeditext);
        timePicker.setIs24HourView(true);
 
        new AlertDialog.Builder(this).setTitle("设置").setView(view)
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {
            public void onClick (DialogInterface dialog, int which) {
				String timeStr = String.valueOf(timePicker.getCurrentHour()) + ":" + 
											String.valueOf(timePicker.getCurrentMinute());
				/*
				calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour());
				calendar.set(Calendar.MINUTE, 55);
				*/
				onetextview.setText("您设置的时间为: " + timeStr);
				twotextview.setText("您设置的号码为: " + oneeditext.getText().toString());
				threetextview.setText("您设置的内容为: " + twoeditext.getText().toString());
				sharedPreferences.edit().putString(timeStr, timeStr).commit();
				sharedPreferences.edit().putString("haoma", oneeditext.getText().toString()).commit();
				sharedPreferences.edit().putString("neirong", twoeditext.getText().toString()).commit();
            }
        }).setNegativeButton("取消", null).show();
    }
}

public class AlarmReceiver extends BroadcastReceiver {
    /**
     * 通过广播进行扫描,是否到达时间后再响起闹铃
     * */
    @Override
    public void onReceive(Context context, Intent intent) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(
                "alarm_record", Activity.MODE_PRIVATE);
        String hour = String.valueOf(Calendar.getInstance().get(
                Calendar.HOUR_OF_DAY));
        String minute = String.valueOf(Calendar.getInstance().get(
                Calendar.MINUTE));
        String time = sharedPreferences.getString(hour + ":" + minute, null);// 小时与分,
        String haoma = sharedPreferences.getString("haoma", null);
        String neirong = sharedPreferences.getString("neirong", null);
        if (time != null) {// 判断是否为空,然后通过创建,
            // MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.a);
            Toast.makeText(context, "短信已经发送成功", Toast.LENGTH_LONG).show();
            // mediaPlayer.start();// 开始 ;
            sendMsg(haoma, neirong);
        }
    }

    private void sendMsg(String number, String message) {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(number, null, message, null, null);
    }
}
我们一定要给自己提出这样的任务:第一,学习,第二是学习,第三还是学习。 —— 列宁
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号