|
在做Android开发中经常要用到短信的发送和短信的接收,调用Android提供的api实现起来很简单,今天要用到这个功能研究了一下顺便写下来加强一下记忆。
1.首先创建一个Android Project
2.设计一个main Activity作为发短信的操作界面,设计好的界面图如下:
界面布局的文件内容如下:
java代码:
< ?xml version="1.0" encoding="utf-8"? >
< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
androidrientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10sp"
>
< TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/mobile_label"
/ >
< EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/txt_from"
android:hint="请输入电话号码"
/ >
< TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/content_label"
/ >
< EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/txt_content"
android:hint="请输入短信内容"
android:lines="3"
/ >
< TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
>< /TextView >
< Button
android:text="发送短信"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:id="@+id/btnSend"
android:paddingTop="20sp"
/ >
< /LinearLayout >
复制代码
3.创建一个Java类文件,导入以下包:
java代码: import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.eshore.smsManagers.R;
import android.app.Activity;
import android.telephony.gsm.*;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.os.Bundle;
复制代码 4.重写onCreate方:
java代码:
txtFrom=(EditText)this.findViewById(R.id.txt_from);
txtContent=(EditText)this.findViewById(R.id.txt_content);
btnSend=(Button)this.findViewById(R.id.btnSend);
btnSend.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(!validate())
return;
SmsManager.getDefault().sendTextMessage(txtFrom.getText().toString().tri(),null,txtContent.getText().toString(),null,null);
txtFrom.setText("");
txtContent.setText("");
Toast toast=Toast.makeText(main.this, "短信发送成功!",Toast.LENGTH_LONG);
toast.show();
}
});
复制代码
相关的辅助方法有手机的合法性验证和短信内容不可为空:
java代码:
//合法性验证
private boolean validate(){
String mobile=txtFrom.getText().toString().trim();
String content=txtContent.getText().toString();
if(mobile.equals("")){
Toast toast=Toast.makeText(this, "手机号码不能为空!",Toast.LENGTH_LONG);
toast.show();
return false;
}
else if(!checkMobile(mobile)){
Toast toast=Toast.makeText(this, "您输入的电话号码不正确请重新输入!",Toast.LENGTH_LONG);
toast.show();
return false;
}
else if(content.equals("")){
Toast toast=Toast.makeText(this, "短信内容不能为空请重新输入!",Toast.LENGTH_LONG);
toast.show();
return false;
}
else{
return true;
}
}
/*
*中国移动134.135.136.137.138.139.150.151.152.157.158.159.187.188 ,147(数据卡不验证)
*中国联通130.131.132.155.156.185.186
*中国电信133.153.180.189
CDMA 133,153
手机号码验证 适合目前所有的手机
*/
public boolean checkMobile(String mobile){
String regex="^1(3[0-9]|5[012356789]|8[0789])\d{8}$";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(mobile);
return m.find();
}
复制代码
经过上面的几个步骤发短信的功能基本就完成了,但是现在运行程序是无法工作的,主要是配置文件AndroidManifest.xml中的权限没有配置,要发送短信就要配置,发送短信的权限这样Android才会发送信息,否则发不出去信息,同样接收信息也需要有相应的接收短信的权限,在后面还要做接收短信的内容,所以在这里顺便将接收和发送短信的权限都配置好,配置代买如下:
java代码:
< uses-permission android:name="android.permission.SEND_SMS"/ >
< uses-permission android:name="android.permission.RECEIVE_SMS"/ >
复制代码可以看出来第一行是发送短信的权限,第二行是接收短信的权限
运行程序,填写正确的手机号和短信内容点击发送就可以将短信内容发送到相应的手机号上。
5、接收短信,接收短信稍有点复杂,首先创建一个接收短信的Java类文件“ReceiverDemo.java”并继承”BroadcastReceiver”
6.重写下面的方法:
java代码:
public void onReceive(Context context, Intent intent)
//重写内容如下:
private static final String strRes = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
/*
* 判断是否是SMS_RECEIVED事件被触发
*/
if (intent.getAction().equals(strRes)) {
StringBuilder sb = new StringBuilder();
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msg = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
msg = SmsMessage.createFromPdu((byte[]) pdus);
}
for (SmsMessage currMsg : msg) {
sb.append("您收到了来自:【");
sb.append(currMsg.getDisplayOriginatingAddress());
sb.append("】的信息,内容:");
sb.append(currMsg.getDisplayMessageBody());
}
Toast toast = Toast.makeText(context, "收到了短消息: " + sb.toString(),Toast.LENGTH_LONG);
toast.show();
}
}
}
复制代码 |
|