`

发送短信

阅读更多

 

package com.example.sendmessage;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

	private EditText et_phone, et_content;
	private Button bt;

	private Context context;
	String SENT_SMS_ACTION = "SENT_SMS_ACTION";
	String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		et_phone = (EditText) findViewById(R.id.et_phone);
		et_content = (EditText) findViewById(R.id.et_content);
		bt = (Button) findViewById(R.id.bt_send);
		context = MainActivity.this;

		// 注册通知
		// IntentFilter filter = new IntentFilter();
		// filter.addAction(SENT_SMS_ACTION);
		// filter.addAction(DELIVERED_SMS_ACTION);
		// registerReceiver(this.broadcastReceiver, filter);

		// 获取短信管理器
		// final SmsManager smsManager = SmsManager.getDefault();
		// // PendingIntent sentIntent = PendingIntent.getBroadcast(
		// // MainActivity.this, 0, new Intent(), 0);
		// Intent sentIntent = new Intent(SENT_SMS_ACTION);
		// final PendingIntent sentPI = PendingIntent.getBroadcast(context, 0,
		// sentIntent, 0);
		// // create the deilverIntent parameter
		// Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);
		// final PendingIntent deliverPI = PendingIntent.getBroadcast(context,
		// 0,
		// deliverIntent, 0);
		bt.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				sendMes();
			}
		});
		// context.registerReceiver(new BroadcastReceiver() {
		// @Override
		// public void onReceive(Context _context, Intent _intent) {
		// switch (getResultCode()) {
		// case Activity.RESULT_OK:
		// Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT)
		// .show();
		// break;
		// case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
		// Toast.makeText(context,
		// SmsManager.RESULT_ERROR_GENERIC_FAILURE,
		// Toast.LENGTH_SHORT).show();
		// break;
		// case SmsManager.RESULT_ERROR_RADIO_OFF:
		// Toast.makeText(context, SmsManager.RESULT_ERROR_RADIO_OFF,
		// Toast.LENGTH_SHORT).show();
		// break;
		// case SmsManager.RESULT_ERROR_NULL_PDU:
		// Toast.makeText(context, SmsManager.RESULT_ERROR_NULL_PDU,
		// Toast.LENGTH_SHORT).show();
		// break;
		// }
		// }
		// }, new IntentFilter(SENT_SMS_ACTION));
		// context.registerReceiver(new BroadcastReceiver() {
		// @Override
		// public void onReceive(Context _context, Intent _intent) {
		// Toast.makeText(context, "收信人已经成功接收", Toast.LENGTH_SHORT).show();
		// }
		// }, new IntentFilter(DELIVERED_SMS_ACTION));

	}

	private void sendMes() {
		// 直接调用短信接口发短信
		String mobile = et_phone.getText().toString();
		String content = et_content.getText().toString();
		// 判断输入是否为空
		if (mobile == null || "".equals(mobile)) {
			Toast.makeText(MainActivity.this, "发送号码不能为空!", Toast.LENGTH_SHORT)
					.show();
			return;
		}
		// if (!isPhoneNumberValid(mobile)) {
		// Toast.makeText(MainActivity.this, "发送号码格式不正确!",
		// Toast.LENGTH_SHORT).show();
		// return;
		// }
		if (content == null || "".equals(content)) {
			Toast.makeText(MainActivity.this, "发送内容不能为空!", Toast.LENGTH_SHORT)
					.show();
			return;
		}
		// 调起系统发短信功能
		// Uri uri = Uri.parse("smsto:10010");
		// Intent it = new Intent(Intent.ACTION_SENDTO, uri);
		// it.putExtra("sms_body", "102");
		// startActivity(it);
		try {
			// 获取短信管理器
			final SmsManager smsManager = SmsManager.getDefault();

			Intent sentIntent = new Intent(SENT_SMS_ACTION);
			PendingIntent sentPI = PendingIntent.getBroadcast(context, 0,
					sentIntent, 0);
			// SmsManager smsManager = SmsManager.getDefault();
			// PendingIntent sentIntent = PendingIntent.getBroadcast(
			// MainActivity.this, 0, new Intent(), 0);
			if (content.length() >= 70) {
				// 短信字数大于70,自动分条
				List<String> ms = smsManager.divideMessage(content);

				for (String str : ms) {
					// 短信发送
					smsManager.sendTextMessage(mobile, null, str, sentPI, null);
				}
			} else {
				smsManager.sendTextMessage(mobile, null, content, sentPI, null);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		// Toast.makeText(MainActivity.this, "发送成功!", Toast.LENGTH_LONG).show();
		context.registerReceiver(new BroadcastReceiver() {
			@Override
			public void onReceive(Context _context, Intent _intent) {
				switch (getResultCode()) {
				case Activity.RESULT_OK:
					Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT)
							.show();
					break;
				case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
					// Toast.makeText(context,
					// SmsManager.RESULT_ERROR_GENERIC_FAILURE,
					// Toast.LENGTH_SHORT).show();
					break;
				case SmsManager.RESULT_ERROR_RADIO_OFF:
					// Toast.makeText(context,
					// SmsManager.RESULT_ERROR_RADIO_OFF,
					// Toast.LENGTH_SHORT).show();
					break;
				case SmsManager.RESULT_ERROR_NULL_PDU:
					// Toast.makeText(context, SmsManager.RESULT_ERROR_NULL_PDU,
					// Toast.LENGTH_SHORT).show();
					break;
				}
			}
		}, new IntentFilter(SENT_SMS_ACTION));
	}

	/* 检查字符串是否为电话号码的方法,并回传true or false的判断值 */
	public static boolean isPhoneNumberValid(String phoneNumber) {
		boolean isValid = false;
		/*
		 * 可接受的电话格式有: * ^\\(? : 可以使用 "(" 作为开头 * (\\d{3}): 紧接着三个数字 * \\)? :
		 * 可以使用")"接续 * [- ]? : 在上述格式后可以使用具选择性的 "-". * (\\d{3}) : 再紧接着三个数字 * [-
		 * ]? : 可以使用具选择性的 "-" 接续. * (\\d{4})$: 以四个数字结束. * 可以比对下列数字格式: *
		 * (123)456-7890, 123-456-7890, 1234567890, (123)-456-7890
		 */
		String expression = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$";
		/*
		 * 可接受的电话格式有: * ^\\(? : 可以使用 "(" 作为开头 * (\\d{2}): 紧接着两个数字 * \\)? :
		 * 可以使用")"接续 * [- ]? : 在上述格式后可以使用具选择性的 "-". * (\\d{4}) : 再紧接着四个数字 * [-
		 * ]? : 可以使用具选择性的 "-" 接续. * (\\d{4})$: 以四个数字结束. * 可以比对下列数字格式: *
		 * (123)456-7890, 123-456-7890, 1234567890, (123)-456-7890
		 */
		String expression2 = "^\\(?(\\d{2})\\)?[- ]?(\\d{4})[- ]?(\\d{4})$";
		CharSequence inputStr = phoneNumber;
		/* 建立Pattern */Pattern pattern = Pattern.compile(expression);
		/* 将Pattern 以参数传入Matcher作Regular expression */
		Matcher matcher = pattern.matcher(inputStr);
		/* 建立Pattern2 */Pattern pattern2 = Pattern.compile(expression2);
		/* 将Pattern2 以参数传入Matcher2作Regular expression */
		Matcher matcher2 = pattern2.matcher(inputStr);
		if (matcher.matches() || matcher2.matches()) {
			isValid = true;
		}
		return isValid;
	}
}

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="电话号码" />

    <!-- 电话号码输入 -->

    <EditText
        android:id="@+id/et_phone"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="内容" />

    <!-- 短信内容编辑 -->

    <EditText
        android:id="@+id/et_content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:minLines="3" />
    <!-- 可3行显示 -->
    <!-- 设置左边输入 -->

    <Button
        android:id="@+id/bt_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送" />

</LinearLayout>

 

manifest:
<!-- 添加短信服务 -->
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.INTERNET" />

 

 

分享到:
评论

相关推荐

    4G模块发短信源码

    总的来说,这个4G模块发短信的源码项目涉及到串口通信、短信编码、错误处理和AT命令集的使用等多个方面,是一个结合硬件通信与软件编程的实例。通过学习和理解这些代码,我们可以掌握在Linux环境下通过4G模块进行...

    发短信小例子(Android)

    这个"发短信小例子"就是一个简单的实现,旨在帮助开发者理解如何在Android应用中集成短信发送功能。下面将详细讲解这个功能的实现步骤、核心代码以及需要注意的关键点。 首先,Android系统提供了一个名为`...

    短信猫C#、asp.net webservice发短信

    综上所述,短信猫C#、ASP.NET WebService发短信项目涉及到了C#编程、短信猫API接口的使用、长短信处理、Web服务开发、网络通信、安全性、错误处理等多个方面的知识,是一个综合性的IT实践项目。通过这个项目,开发者...

    给自己发短信的Shell脚本利用飞信

    标题中的“给自己发短信的Shell脚本利用飞信”指的是使用Linux Shell脚本来通过中国移动的飞信服务发送短信给自己。这个方法通常适用于自动化任务或者在没有手机网络的情况下,通过电脑来提醒自己某些重要事件。 ...

    免费发送短信(无需登陆)

    比如,“免费短信发发发V3.0 (仅发英文字符)”可能是该软件的一个版本,主要用于发送英文短信;“全球短信免费发1.51 (仅发英文字符)”可能类似,但可能支持全球范围内的发送;而“中文短信免费发1.2”则表明有专门...

    java代码实现短信猫发短信

    Java代码实现短信猫发送短信是一项常见的通信应用,主要利用了串行通信技术。短信猫,又称GSM调制解调器,是一种硬件设备,通过USB或串口与计算机连接,可以实现短信的收发功能。在Java编程环境中,我们可以利用Java...

    vb短信接口开发_vb发送短信验证码通知_Visual Basic短信demo示例.docx

    在VB(Visual Basic)开发中,短信接口的集成是一个常见的需求,例如用于发送验证码或订单通知。本示例介绍如何使用VB与互亿无线短信服务进行接口开发。 首先,要使用互亿无线短信接口,您需要在他们的官方网站...

    Spring Boot阿里云短信:如何实现发送短信

    与之结合,阿里云提供了高效的短信服务,使得应用能够轻松地发送验证码、通知等短信。本篇文章将详细阐述如何在Spring Boot项目中集成阿里云短信服务,实现发送短信的功能。 首先,我们需要在阿里云官网注册账号并...

    GSM(A6)发送短信 C语言代码

    GPRS模块,是具有GPRS数据传输功能的GSM模块。GPRS模块就是一个精简版的手机,集成GSM通信的主要功能于一块电路板上,具有发送短消息、通话、数据传输等功能。...1. 以文本方式发送短信; 2. 以PDU模式发送短信;

    GSM标准发短信程序

    在这个“GSM标准发短信程序”中,我们主要探讨的是如何通过编程实现利用GSM模块发送中文短信的功能。 在编程实现GSM短信发送功能时,通常需要以下几个关键知识点: 1. **GSM模块**:GSM模块是硬件设备,它能够与...

    PLC发短信 组态王发短信

    【PLC发短信 组态王发短信】技术详解 在工业自动化领域,PLC(可编程逻辑控制器)常用于设备控制,而短信发送功能则能实现远程监控和报警。本文将详细介绍如何利用西安达泰电子有限责任公司的DTP_S09C短信模块,...

    阿里云发送短信C++源码、实测通过

    阿里云短信服务是一种高效、可靠的云通信解决方案,广泛应用于验证码发送、通知提醒、营销推广等场景。本示例主要关注如何使用C++编程语言在Windows环境下通过VS2019集成开发环境与阿里云API接口进行集成,实现短信...

    SMS.zip_labview发送短信_短信_短信发送

    在这个特定的“SMS.zip_labview发送短信_短信_短信发送”项目中,用户可以找到一个利用LabVIEW实现短信发送功能的源代码。这个功能对于远程监控、自动化系统以及实时数据通信等应用场景非常有用。 首先,我们要理解...

    局域网内连接短信平台发短信

    "局域网内连接短信平台发短信"这个主题涉及到网络通信、服务器连接以及短信服务的使用。以下将详细介绍相关知识点: 1. **局域网基础**: - 局域网是一种在有限地理范围内的计算机网络,通常覆盖办公楼、家庭或...

    PB发短信程序

    PB发短信程序是一款基于PowerBuilder(PB)开发的短信发送工具。PowerBuilder是Sybase公司推出的一种可视化的、面向对象的编程环境,主要用于快速开发数据库应用程序。本程序的开发者利用PB的强大功能,创建了一个...

    网页免费发短信

    网页免费发短信是一种技术,它允许用户通过网页接口发送和接收短信,通常与特定的服务提供商如飞信(Fetion)关联。飞信是中国移动推出的一款即时通讯服务,支持通过互联网与手机用户进行免费或低成本的短信交流。在...

    c用#实现手机发短信功能的源代码

    在本案例中,我们关注的是一个使用C#实现的手机发短信功能。这个功能允许程序通过连接到手机或者利用网络服务来发送文本消息,极大地便利了自动化通信和通知系统。以下是对这个"发短信"功能的详细解读。 1. **C#...

    用短信接口发送短信的程序

    发短信在编程领域通常指的是通过程序自动化发送短信的过程。这种功能在许多场景下都很有用,如验证码发送、通知提醒、营销推广等。发短信涉及的主要步骤包括:连接到短信网关、构建短信内容、指定接收方手机号码、...

    用web发送短信,找我要源代码,不管用什么编程语言都可以

    在现代的IT应用中,通过Web发送短信是一种常见的通信方式,尤其在验证码验证、通知服务、营销推广等方面有着广泛的应用。这个标题和描述都指向了同一个主题:如何使用不同的编程语言通过Web接口来发送短信。这里我们...

Global site tag (gtag.js) - Google Analytics