Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 608|回复: 0

[Android实例] Android 发送和接收短信实例 -  Android资讯

[复制链接]

该用户从未签到

发表于 2011-10-25 09:58:01 | 显示全部楼层 |阅读模式
在做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();

}

}



}
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 16:55 , Processed in 0.364423 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表