`
byandby
  • 浏览: 1697760 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 发送SMS消息、监视传入的SMS消息

阅读更多
   使用SMS
   SMS表示短消息服务,但它通常称为文本消息。Android SDK支持发送和接收文本消息。首先介绍使用 SDK 发送SMS消息的各种方法。
  1.发送SMS消息
    要从应用程序发送文本消息,需要向描述文件中添加
  <uses-permission android:name="android.permission.SEND_SMS"/>
权限,然后使用 android.telephony.SmsManager类,下面看一下我们的布局文件。
  
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	    android:orientation="horizontal"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
    >
 
    	<TextView
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:text="Destination Address:"/>
    	<EditText
    		android:id="@+id/addrEditText"
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content"
    		android:phoneNumber="true"
    		android:text="9045551212"/>
	</LinearLayout>
	
	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	    android:orientation="vertical"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
    >
    	<TextView
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:text="Text Message"/>
    	<EditText
    		android:id="@+id/msgEditText"
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content"
    		android:text="hello sms"/>
	</LinearLayout>
	<Button
		android:id="@+id/sendSmsBtn"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:text="Send Text Message"/>
</LinearLayout>


   我们的Activity类 TelephonyDemo类
package xiaohang.zhimeng;

import android.app.Activity;
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 TelephoneDemo extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button sendBtn = (Button) findViewById(R.id.sendSmsBtn);

		sendBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				EditText addrTxt = (EditText) TelephoneDemo.this
						.findViewById(R.id.addrEditText);

				EditText msgTxt = (EditText) TelephoneDemo.this
						.findViewById(R.id.msgEditText);
				try {
					sendSmsMessage(addrTxt.getText().toString(), msgTxt
							.getText().toString());
					Toast.makeText(TelephoneDemo.this, "SMS Sent",
							Toast.LENGTH_LONG).show();
				} catch (Exception e) {
					Toast.makeText(TelephoneDemo.this, "Failed to send SMS",
							Toast.LENGTH_LONG).show();
					e.printStackTrace();
				}
			}

		});
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
	}

	private void sendSmsMessage(String address, String message) {
		// 可以通过静态方法getDefault()方法来获得 一个SmsManager对象
		SmsManager smsMgr = SmsManager.getDefault();
		// 发送消息
		smsMgr.sendTextMessage(address, null, message, null, null);
	}
}


  下面看一下运行效果 见下图



   上面的示例演示了使用Android SDK 发送 SMS文本消息。首先看一下布局代码片段,可以看到,用户界面包含两个EditText字段:一个用于捕获SMS 接收者的目标地址 (电话号码),另一个用于保存文本消息。用户界面还有一个按钮用来发送消息。

   该示例有一个 sendSmsMessage()方法。该方法使用SmsManager类的 sendTextMessage()方法来发送SMS消息。下面给出了 SmsManager.sendTextMessage()的签名:
  sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent)

   在这个示例中,仅填充了目标地址和文本消息参数。但是,可以自定义该方法,以便不使用默认的SMS中心(蜂窝塔网络上发送SMS消息的服务器地址)。也可以实现一个自定义方法,在发送消息或收到通知时调用挂起的 Intent。

   总之,使用Android很容易实现SMS消息的发送。请注意,使用模拟器,SMS消息不会实际发送到目的地。但是,如果 sendTextMessage()方法未返回异常,就可以认为发送成功。我们使用了Toast类在UI中消息 发送成功的提示,以表明消息是否发送成功。
  
  2.监视传入的SMS消息。

  基本的思路是这样的 当设备 也就是我们的手机 收到一条短消息的时候 系统就会广播就会广播一个包含了
android.provider.Telephony.SMS_RECEIVED
动作的 Intent。我们只需要自己定义一个 广播接收器BroadcastReceiver  来过滤这个 Intent 然后 在 onReceive()方法里边实现自己的逻辑。

   首先第一步是,请求接受它们的权限。将
 <uses-permission android:name="android.permission.RECEIVE_SMS"/>
权限添加到 描述文件中。接下来,需要实现一个监视程序来监听 SMS消息。就是我们自己定义的BroadcastReceiver 我们来看看我们自己的 定义的BroadcastReceiver 的代码
package xiaohang.zhimeng;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import android.util.Log;

public class MySMSMonitor extends BroadcastReceiver {

	private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

	@Override
	public void onReceive(Context context, Intent intent) {
		if (intent != null && intent.getAction() != null
				&& ACTION.compareToIgnoreCase(intent.getAction()) == 0) {
			Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
			SmsMessage[] messages = new SmsMessage[pduArray.length];
			for (int i = 0; i < pduArray.length; i++) {
				messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]);
				// 打印消息
				System.out.println(messages[i].getDisplayMessageBody());
			}
			Log.d("MySMSonitor", "SMS Message Received.");
		}
	}
}

  
   然后我们还需要在AndroidManifest.xml 文件中注册这个 接收器。
<receiver android:name="MySMSMonitor">
        	<intent-filter>
        		<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        	</intent-filter>
        </receiver>


     onReceive()方法将拥有广播 Intent,它将在 bundle属性中包含了 SmsMessage。可以调用
intent.getExtras().get("pdus")
提取出 SmsMessage。此调用返回一个在PDU(Protocol Description Unit, 协议描述单元)模式中定义的对象数组,PDU是一种表示SMS消息的行业标准方式。 然后可以将PDU转换为 Android SmsMessage对象。从上面的代码我们可以看到 以对象数组的形式从 Intent 获得PDU。然后构造一个 SmsMessage 对象数组,其大小与PDU 数组的大小相等。最后,对PDU数组进行迭代,调用 SmsMessage.createFromPdu()来从PDU创建 SmsMessage对象。读取传入消息之后的操作必须迅速完成。尽管广播接收程序在系统中拥有较高的优先级,但它仍然必须快速完成相关操作,并且不能让用户看见。因此,你的选择是有限的。绝不要直接执行任何UI工作。可以发出通知,也可以启动服务来继续工作。onReceive()方法完成以后,onReceive()方法的承载进程随时可能被结束。可以启动服务,但不能绑定到服务,因为这样就意味进程需要存在一段时间,而这种情况是不可能发生的。

    大家自己用 Emulator Control给模拟器发一条消息 试试就OK 了。
   






   源码已上传
  • 大小: 27.1 KB
  • 大小: 14.2 KB
  • 大小: 13.4 KB
2
3
分享到:
评论
1 楼 jay_st 2014-11-04  
请问你这个可以同时接受和发送吗

相关推荐

    Android_SMS.rar_Android_SMS_android_apk_安卓 短信发送_安卓SMS

    【标题】"Android_SMS.rar" 是一个包含有关Android短信功能的源代码压缩包,主要针对的是Android平台上短信的发送和接收。"Android_SMS_android_apk" 暗示了这可能是一个已经打包好的APK应用,可以安装在Android设备...

    Sms.rar_MMS_android sms_android 短信_sms_sms android

    这个名为"Sms.rar"的压缩包包含了一个关于Android SMS(Short Message Service)功能的源码实现,特别提到了MMS(Multimedia Messaging Service)的支持,这允许发送和接收包含多媒体内容的消息。下面将详细解释这些...

    android sms的发送以及接受

    在Android系统中,短信服务(SMS)是移动应用开发中不可或缺的一部分,允许用户发送和接收文本消息。本文将深入探讨如何在Android平台上实现短信的发送与接收功能。 首先,我们需要了解Android SMS服务的基础知识。...

    linphone-android-sms_defaultable_APP_linphone_android_sms_

    "linphone-android-sms_defaultable_APP_linphone_android_sms_"这个标题暗示了我们主要讨论的是Linphone针对Android平台的短消息功能。在这个版本中,Linphone不仅提供了语音通话服务,还集成了短信功能,使得用户...

    Android SMS 发送 接收及格式

    Android SMS 发送 接收及格式

    Android 短信SMS发送代码流程

    Android 短信SMS发送代码流程 Android 短信SMS发送代码流程是 Android 操作系统中的一种重要功能,允许用户发送短信给其他用户。本文将详细介绍 Android 短信SMS发送代码流程的实现机制。 Messaging 应用层 在 ...

    Android-SMS.rar_android_android sms_android tts SMS_android 短信_s

    开发者可以通过`SMSManager.getDefault()`获取默认的SMS管理器实例,然后调用`sendTextMessage()`方法来发送文本短信,或使用`sendMultipartTextMessage()`发送多部分消息。 2. **监听短信**: 为了实现实时的短信...

    SMS.rar_android_android sms.zip_sms_sms android_sms java

    例如,`&lt;uses-permission android:name="android.permission.SEND_SMS" /&gt;`用于发送短信,`&lt;uses-permission android:name="android.permission.RECEIVE_SMS" /&gt;`用于接收短信。从Android 6.0(API级别23)开始,还...

    android-sms短信发送

    这个【android-sms短信发送】项目旨在教你如何在虚拟环境中实现一个完整的短信发送流程。以下是对这一知识点的详细阐述: 1. **短信API使用**: Android系统提供了一个名为`SmsManager`的类,它是用于发送和接收...

    SMS.zip_android_android sms_sms

    在Android系统中,短信服务(SMS)是移动设备通信的一个核心部分,它允许用户发送、接收和管理文本消息。 描述中的“android 收取短信时间,内容等”提示我们,这个压缩包可能包含了处理短信接收时的时间记录以及...

    Android send SMS and save SMS

    在Android平台上,发送短信和保存短信记录是两个重要的功能,它们涉及到系统级别的权限以及与SMS相关的API交互。本文将深入探讨这两个主题,并提供相应的代码示例。 ### 1. Android发送短信 在Android中,发送短信...

    Android 追踪和确认SMS消息传递.docx

    你可以通过指定目标模拟器的端口号作为“to”地址来发送消息。Android系统会自动将消息路由到正确的模拟器实例,模拟真实的短信接收过程。 此外,考虑到短信长度的限制,如果短信内容超过160个字符,你需要使用`...

    sms.zip_Android 数据库_android_android sms_sms

    标题中的“sms.zip_Android 数据库_android_android sms_sms”暗示了这是一个关于Android短信功能的SQLite数据库开发相关的资源包。下面将详细介绍这个主题中的关键知识点。 1. **SQLite数据库**:SQLite是Android...

    SMS.rar_android_android sms_sms_sms java

    这个"SMS.rar"文件可能包含了关于如何在Android平台上处理SMS消息、管理联系人以及与SIM卡交互的相关代码示例或教程。接下来,我们将深入探讨这些关键知识点。 1. **Android SMS API**: Android提供了丰富的API来...

    android sms send

    "android sms send"这一主题涵盖了如何在Android环境中发送短信,这通常涉及到编程接口(API)的使用,调试技巧以及不同设备间的兼容性问题。下面将详细介绍这个知识点。 首先,Android系统提供了一个名为`...

    aws-sms:通过AWS SNS构建和发送SMS消息

    通过AWS SNS发送SMS消息的软件包 介绍 通过AWS SNS发送电子邮件 例子 package main import ( "context" sms "github.com/gofor-little/aws-sms" ) func main () { // Initialize the SMS package. if err := sms...

    php编写的发送SMS消息的类 可以下载打包文件

    标题中的“php编写的发送SMS消息的类”指的是一个用PHP编程语言开发的类库,其主要功能是发送短信(SMS)。这个类通常包含了处理短信服务提供商接口、短信编码、错误处理等核心功能,使得开发者能够轻松地在PHP应用...

    android4.0 sms源码

    android4.0 sms源码, 很多新特性, 可以参考啊。 老乔年轻时说, 有名的艺术家是抄袭, 伟大的艺术家是偷窃。 what are you waiting for ? let's do it !

    SMS.rar_android_android sms

    在Android平台上,短信服务是移动应用开发中的一个重要组成部分,它允许用户发送和接收文本消息。在给定的“SMS.rar”压缩包中,我们聚焦于一个Android应用的源码,该应用专门实现了短信发送功能。这里我们将深入...

Global site tag (gtag.js) - Google Analytics