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

作者:Q-WHai 时间:2021-06-14 06:59:26 

说实话,关于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>

短信的拦截

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

提高优先权:

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

阻断传播:

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

短信的删除

以下是短信相关的协议

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,短信
0
投稿

猜你喜欢

  • android开机自启动app示例分享

    2023-02-20 18:04:29
  • C#汉字转换拼音技术详解(高性能)

    2022-01-19 02:03:16
  • idea springboot远程debug的操作方法

    2022-11-01 00:04:31
  • Android实现ImageView图片双击放大及缩小

    2022-04-07 10:34:06
  • Android8.1原生系统网络感叹号消除的方法

    2022-09-29 18:38:52
  • spring cglib 与 jdk 动态代理

    2021-07-19 20:28:43
  • JavaWeb详细讲述Cookie和Session的概念

    2022-03-23 08:39:44
  • C++类的空指针调用成员函数的代码

    2023-12-10 15:56:02
  • 教你如何用好 Java 中的枚举

    2022-11-03 10:31:21
  • C#使用OpenCv图像批处理并改变图片大小并且重命名

    2023-12-20 11:10:29
  • Mybatis批量插入更新xml方式和注解方式的方法实例

    2022-06-17 18:09:09
  • Mybatis实现SQL存储流程详解

    2022-09-11 05:17:05
  • centos下GitLab+Jenkins持续集成环境搭建(安装jenkins)

    2023-05-13 05:02:40
  • c#构造ColorComboBox(颜色下拉框)

    2022-07-23 21:54:12
  • 逆转交替合并两个链表的解析与实现

    2021-12-31 12:37:41
  • Android 保存WebView中的图片示例

    2021-10-05 21:57:05
  • Java实现数组反转翻转的方法实例

    2021-09-19 00:21:26
  • Java如何实现上传文件到服务器指定目录

    2021-10-16 14:38:31
  • java 画pdf用itext调整表格宽度、自定义各个列宽的方法

    2021-07-12 04:16:10
  • 详解java动态代理模式

    2023-03-29 13:39:29
  • asp之家 软件编程 m.aspxhome.com