返回顶部
首页 > 资讯 > 移动开发 >Android项目实现短信的发送、接收和对短信进行拦截
  • 817
分享到

Android项目实现短信的发送、接收和对短信进行拦截

Android 2022-06-06 07:06:30 817人浏览 八月长安
摘要

说实话,关于Android中对短信的一些相关操作是一个比较入门的东西。那我现在还要来写这一篇博客的原因只是因为现在开发中有相关内容,而又想将这些东西分享给更多的人来学习,同时在

说实话,关于Android中对短信的一些相关操作是一个比较入门的东西。那我现在还要来写这一篇博客的原因只是因为现在开发中有相关内容,而又想将这些东西分享给更多的人来学习,同时在以后对Android系统的短信进行其他学习的时候也就放在这里做一个记录了,于是就写了这篇啰嗦的文章。如果你觉得这是一个不错的东西,欢迎收藏,以便在以后更方便地查看本人在此篇文章中更新的内容。下面我就从标题中的三个方面来对Android系统中的短信操作进行一个简单地学习。

短信的发送

由于Android中对短信发送方法的优良封装,之后对发送短信的开发就显得异常的简单了。


public static void sendMessage(Context context, String content, String phoneNumber) { 
    SmsManager sms = SmsManager.getDefault(); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, new Intent(), 0); 
    sms.sendTextMessage(phoneNumber, null, content, pi, null); 
  } 

 别忘了还有权限问题: 


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

短信的接收

对于短信息的接收相对来说会复杂一些。而复杂的原因大家也应该比较容易理解——接收是不可控制的。也就是说我们的手机根本不知道什么时候会有一条短信息过来。由于过于被动,Android的机制中就出现了一个强大到让你佩服的东西,那就是广播接收者。我们注册一个广播接收者,然后让这个广播接收者时时刻刻地去监听短信息是否到达的这一事件。就这样,被动触发事件完美地解决了。下面让我们来看看这个过程:


public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { 
      Bundle bundle = intent.getExtras(); 
      Object messages[] = (Object[]) bundle.get("pdus"); 
      SmsMessage smsMessage[] = new SmsMessage[messages.length]; 
      for (int n = 0; n < messages.length; n++) { 
        smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
      } 
      showToast(context, "短信内容: " + smsMessage[0].getMessageBody()); 
    } 
  } 

添加权限:


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

以及在manifest中进行一个静态注册:


<receiver android:name=".broadcast.SMSReceiver" > 
        <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
    </receiver> 

短信的拦截

在能够接收短信的基础上做一个短信拦截倒是简单了许多。因为能够接收,所以我只要成为第一个接收的人,并把接收到的短信不再向下传播,这就完成了短信息的拦截了。

提高优先权:

阻断传播:

短信的删除

以下是短信相关的协议

content://sms/inbox    收件箱
content://sms/sent    已发送
content://sms/draft    草稿
content://sms/outbox    发件箱
content://sms/failed    发送失败
content://sms/queued    待发送列表

就拿收件箱为例实现短信的删除代码如下:

实现删除短信中包含某一字段的短信:


public void deleteSMS(String smscontent) { 
    ContentResolver CR = getContentResolver(); 
    try { 
      // 准备系统短信收信箱的uri地址 
      Uri uri = Uri.parse("content://sms/inbox"); 
      // 查询收信箱里所有的短信 
      Cursor cursor = CR.query(uri, new String[] { "_id", "address", "person", "body", "date", "type" }, null, null, null); 
      int count = cursor.getCount(); 
      if (count > 0) { 
        while (cursor.moveToNext()) { 
          String body = cursor.getString(cursor.getColumnIndex("body"));// 获取信息内容 
          if (body.contains(smscontent)) { 
            int id = cursor.getInt(cursor.getColumnIndex("_id")); 
            CR.delete(Uri.parse("content://sms"), "_id=" + id, null); 
          } 
        } 
      } 
    } catch (Exception e) { 
      Log.v("e", e.getMessage()); 
    } 
  } 

根据最新的短信实现删除信息(删除的对象是联系人而非短信)


public void deleteSMS() { 
    ContentResolver CR = getContentResolver(); 
    // 查询收信箱里所有的短信 
    Cursor cursor = CR.query(Uri.parse("content://sms/inbox"), new String[] { "_id", "thread_id" }, null, null, null); 
    if (cursor != null) { 
      cursor.moveToFirst(); 
      int a = cursor.getCount(); 
      int b = cursor.getColumnCount(); 
      long threadId = cursor.getLong(1); 
      CR.delete(Uri.parse("content://sms/conversations/" + threadId), null, null); 
    } 
  } 
您可能感兴趣的文章:android短信拦截的实现代码Android发送短信功能代码Android Mms之:短信发送流程(图文详解)android读取短信示例分享Android实现将已发送的短信写入短信数据库的方法Android实现自动提取短信验证码功能


--结束END--

本文标题: Android项目实现短信的发送、接收和对短信进行拦截

本文链接: https://lsjlt.com/news/23608.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作