Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android項目實現短信的發送、接收和對短信進行攔截

Android項目實現短信的發送、接收和對短信進行攔截

編輯:關於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); 
    } 
  } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved