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

Android sms 发送、接收及格式

阅读更多

一、 android sms所要的权限

  Java代码

  <uses-permission android:name="android.permission.READ_SMS" /> 
  <uses-permission android:name="android.permission.RECEIVE_SMS" />

 

  二、 sms发送

  与短消息发送相关的类为:SmsManager.

  Java代码

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

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

  参数说明:

  destinationAddress the address to send the message to

  scAddress is the service center address or null to use the current default SMSC

  text the body of the message to send

  sentIntent if not NULL this PendingIntent is broadcast when the message is sucessfully sent, or failed. The result code will be Activity.RESULT_OK for success, or one of these errors: RESULT_ERROR_GENERIC_FAILURE RESULT_ERROR_RADIO_OFF RESULT_ERROR_NULL_PDU. The per-application based SMS control checks sentIntent. If sentIntent is NULL the caller will be checked against all unknown applications, which cause smaller number of SMS to be sent in checking period.

  deliveryIntent if not NULL this PendingIntent is broadcast when the message is delivered to the recipient. The raw pdu of the status report is in the extended data ("pdu").

  其中两个PendingIntent模式为:

  Java代码

  PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT"), 0);

  Intent deliveryIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0);

  PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT"), 0);

  PendingIntent deliveryIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0);

 

  并注册接收器,根据getResultCode()来判断:

  Java代码

  registerReceiver(sendReceiver);

  registerReceiver(deliveredReceiver);

  registerReceiver(sendReceiver);

  registerReceiver(deliveredReceiver);

  三、 sms接收

  根据接收时广播的android.provider.Telephony.SMS_RECEIVED的Intent.我们可以扩展一个BroadcastReceiver来接收sms.

  传递的Intent包含pdus数据。相关代码如下:

  Java代码

  Bundle bundle = intent.getExtras();

  Object[] pdus = (Object[]) bundle.get("pdus");

  SmsMessage[] msgs = new SmsMessage[pdus.length];

  for (int i = 0; i < pdus.length; i++) {

  msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

  }

  Bundle bundle = intent.getExtras();

  Object[] pdus = (Object[]) bundle.get("pdus");

  SmsMessage[] msgs = new SmsMessage[pdus.length];

  for (int i = 0; i < pdus.length; i++) {

  msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

  }

  四、 采用ContentObserver监控短信数据库

  上面方法三中并不能对sms进行更新和删除操作,要做这些操作需要用ContentObserver来监控短信数据库的变化来进行相关操作。

  1. 短信数据库的ContentUri

  Java代码

  public final static String SMS_URI_ALL = "content://sms/"; //0

  public final static String SMS_URI_INBOX = "content://sms/inbox";//1

  public final static String SMS_URI_SEND = "content://sms/sent";//2

  public final static String SMS_URI_DRAFT = "content://sms/draft";//3

  public final static String SMS_URI_OUTBOX = "content://sms/outbox";//4

  public final static String SMS_URI_FAILED = "content://sms/failed";//5

  public final static String SMS_URI_QUEUED = "content://sms/queued";//6

  public final static String SMS_URI_ALL = "content://sms/"; //0

  public final static String SMS_URI_INBOX = "content://sms/inbox";//1

public final static String SMS_URI_SEND = "content://sms/sent";//2

  public final static String SMS_URI_DRAFT = "content://sms/draft";//3

  public final static String SMS_URI_OUTBOX = "content://sms/outbox";//4

  public final static String SMS_URI_FAILED = "content://sms/failed";//5

  public final static String SMS_URI_QUEUED = "content://sms/queued";//6

  2. sms主要结构:

  Java代码

  _id => 短消息序号 如100

  thread_id => 对话的序号 如100

  address => 发件人地址,手机号.如+8613811810000

  person => 发件人,返回一个数字就是联系人列表里的序号,陌生人为null

  date => 日期 long型。如1256539465022

  protocol => 协议 0 SMS_RPOTO, 1 MMS_PROTO

  read => 是否阅读 0未读, 1已读

  status => 状态 -1接收,0 complete, 64 pending, 128 failed

  type => 类型 1是接收到的,2是已发出

  body => 短消息内容

  service_center => 短信服务中心号码编号。如+8613800755500

  _id => 短消息序号 如100

  thread_id => 对话的序号 如100

  address => 发件人地址,手机号.如+8613811810000

  person => 发件人,返回一个数字就是联系人列表里的序号,陌生人为null

  date => 日期 long型。如1256539465022

  protocol => 协议 0 SMS_RPOTO, 1 MMS_PROTO

  read => 是否阅读 0未读, 1已读

  status => 状态 -1接收,0 complete, 64 pending, 128 failed

  type => 类型 1是接收到的,2是已发出

  body => 短消息内容

  service_center => 短信服务中心号码编号。如+8613800755500

  3. 步骤

  a. 写一个类继承ContentObserver

  Java代码

  public class SMSDBObserver extends ContentObserver

  public class SMSDBObserver extends ContentObserver

  重写onChange方法(里面对INBOX, SEND两个URI进行处理)

  Java代码

  public void onChange(boolean selfChange)

Uri smsInBox = Uri.parse(SMS_URI_INBOX);

  Cursor c = ctx.getContentResolver().query(uriSms, null, selection, selectionArgs, sortOrder);

  //对字段进行操作。。。

  //ctx.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

  //ctx.getContentResolver().update(uri, values, where, selectionArgs);

  //ctx.getContentResolver().delete(url, where, selectionArgs);

  //ctx.getContentResolver().insert(url, values);

  public void onChange(boolean selfChange)

  Uri smsInBox = Uri.parse(SMS_URI_INBOX);

  Cursor c = ctx.getContentResolver().query(uriSms, null, selection, selectionArgs, sortOrder);

  //对字段进行操作。。。

  //ctx.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

  //ctx.getContentResolver().update(uri, values, where, selectionArgs);

  //ctx.getContentResolver().delete(url, where, selectionArgs);

  //ctx.getContentResolver().insert(url, values);

  b. 在Activity中注册短信监控

  Java代码

  // 监控短信

  smsObserver = new SMSDBObserver(new Handler(), this, app);

  getContentResolver().registerContentObserver(Uri.parse(SMSDBObserver.SMS_URI_ALL), true, smsObserver);

  // 监控短信

  smsObserver = new SMSDBObserver(new Handler(), this, app);

  getContentResolver().registerContentObserver(Uri.parse(SMSDBObserver.SMS_URI_ALL), true, smsObserver);

  注:

  想监控已发送的,就要监控content://sms/send.

  想删除时contentUri只能是content://sms/或content://sms/ conversations

分享到:
评论

相关推荐

    Android SMS 发送 接收及格式

    Android SMS 发送 接收及格式

    android sms的发送以及接受

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

    Sms.rar_MMS_android sms_android 短信_sms_sms android

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

    sms 发送接收短信

    本文将详细讲解如何实现基于Android的SMS短信的接收与发送功能。 一、短信发送 1. 权限声明: 首先,为了能够发送短信,需要在AndroidManifest.xml文件中添加以下权限: ```xml &lt;uses-permission android:name=...

    Android如何实现接收和发送短信

    每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能。  一、接收短信 1、创建内部广播接收器类,接收系统发出的短信广播 2、从获得的内容中解析出短信发送者和短信内容 3、在...

    Android 短信SMS发送代码流程

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

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

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

    Android发送和接收短信方法

    ### Android发送和接收短信的方法详解 在Android应用开发过程中,短信功能是常见需求之一,无论是用于用户验证、通知推送还是其他交互场景,掌握如何在Android应用程序中发送和接收短信都是必不可少的技能。本文将...

    SMS发送工具,支持将文本文件通过SMS发送

    SuperSMS很可能就是我们要找的SMS发送工具的APK文件,用户可以在Android设备上安装它来使用这个工具。安装过程通常涉及在设备上开启未知来源的应用安装权限,然后通过文件管理器找到APK文件并点击安装。 关于SMS...

    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)开始,还...

    SMS.zip_android_android sms_sms

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

    Android-SMS.rar_android_android sms_android tts SMS_android 短信_s

    3. **权限管理**: 发送和接收短信需要在AndroidManifest.xml中声明相应的权限,如`&lt;uses-permission android:name="android.permission.SEND_SMS" /&gt;`和`&lt;uses-permission android:name="android.permission.RECEIVE...

    android sms send

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

    sms.zip_Android 数据库_android_android sms_sms

    总结,"sms.zip_Android 数据库_android_android sms_sms"涵盖了Android平台下使用SQLite数据库管理和操作短信数据的相关技术,包括数据库操作、广播接收器、内容提供者、权限控制以及数据备份恢复等多个方面。...

    android-sms短信发送

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

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

    在Android平台上,发送SMS(短消息服务)和监控接收到的SMS消息是常见的功能,尤其在开发涉及到消息通信的应用时。以下将详细讲解如何实现这两个功能,并提供相关的代码示例。 **一、发送SMS消息** 1. **权限申请*...

    android开发短信的sms信息

    本篇将详细探讨Android短信开发的相关知识点,包括发送短信、接收短信、处理短信验证码以及相关的权限管理。 1. **发送短信**: - **使用SmsManager类**:在Android中,`SmsManager`是官方提供的用于发送短信的类...

    SMS.rar_android_android sms

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

    SMS.rar_android_android sms_sms_sms java

    在Android操作系统中,SMS(Short Message Service)是用于发送和接收短信的核心功能。这个"SMS.rar"文件可能包含了关于如何在Android平台上处理SMS消息、管理联系人以及与SIM卡交互的相关代码示例或教程。接下来,...

    SMS_Android.rar_android_android sms

    4. 接收短信:创建一个继承自 `BroadcastReceiver` 的类,重写 `onReceive()` 方法,监听 `android.provider.Telephony.SMS_RECEIVED` 广播,并在此处理收到的短信。 5. 注册接收器:在 `AndroidManifest.xml` 中...

Global site tag (gtag.js) - Google Analytics