簡訊(會話)刪除(轉)

來源:互聯網
上載者:User

標籤:

用過Android系統手機的朋友們相比都知道,AndroidOS的簡訊和iOS一樣,是以會話模式展現的,這種展現方式很容易讓使用者尋找以前的聊天記錄。

關於用代碼刪除簡訊,其實刪除的也是對話,無論是最近的,還是以前的,統統都會一併刪除。

 

下面來看那代碼。

首先需要得到得到簡訊目錄。

view plain
  1. ContentResolver cr;  
  2.     cr = getContentResolver();  

 

再有就是要遍曆下所有簡訊。

view plain
  1. String SMS_READ_COLUMN = "read";  
  2. String WHERE_CONDITION = SMS_READ_COLUMN + " = 0";  
  3. String SORT_ORDER = "date DESC";  
  4. int count = 0;  
  5. Cursor cursor = cr.query(Uri.parse("content://sms/inbox"),  
  6. new String[] { "_id", "thread_id", "address", "person", "date",  
  7. "body" }, WHERE_CONDITION, null, SORT_ORDER);  
  8. if (cursor != null) {  
  9. try {  
  10. count = cursor.getCount();  
  11. if (count > 0) {  
  12. cursor.moveToFirst();  
  13. threadId = cursor.getLong(1);  
  14. }  
  15. } finally {  
  16. cursor.close();  
  17. }  
  18. }  



"content://sms/inbox"就是簡訊的所在路徑,inbox,收件匣。

上述代碼可以得到最新的一條簡訊。

 

我們需要調用一下這個方法,我們可以把這個方法。

view plain
  1. long id = getThreadId();  
  2.         Uri mUri = Uri.parse("content://sms/conversations/" + id);  

這樣就可以得到最新一跳簡訊的所對應的id了。

最後刪除就可以了。

view plain
  1. cr.delete(mUri, null, null);  


別忘了在Manifest.xml中加入許可權。

view plain
  1.     <uses-permission android:name="android.permission.WRITE_SMS" />  
  2.     <uses-permission android:name="android.permission.READ_SMS" />  



另外要強調的是,如果想要得到最新的收件匣資訊,一定要重新獲得id;這裡的id永遠是0,但是如果直接把id用0代替,那麼刪除的就不是最新的了。

如果想刪除其他簡訊,只需要在遍曆的時候加上條件,讓返回的id是條件所對應的會話id就可以了,

 

還有一點要特彆強調,這個方法只能刪除未讀的簡訊對話,因為他的搜尋條件是inbox,當然就是收件匣了;如果讀取了簡訊了,那麼Android系統就應該認定該資訊不屬於收件匣了。

 

 

 

簡訊資訊即時擷取

我們知道,只需通過代碼就可以讀到收件匣中的簡訊,寄件匣中的簡訊;但是卻沒辦法在簡訊發來的瞬間擷取;如果我們在簡訊發來的一瞬間能得到相應的資訊內容,那麼我們就可以依次來展開很多應用了——也就是通過簡訊去遠程操作一部手機。

 

如果想即時擷取,就需要調用receiver了,寫一個監聽類,這樣我們就可以即時擷取短息資訊了。

 

預覽圖:

 

 

還是來看看代碼吧。

 

 

首先,我們需要建立一個監聽類SMSBroadcastReceiver,讓他去繼承BroadcastReceiver。

 

再來初始化一個常量ACTION,並賦簡訊相關參數值。

view plain
  1. android.provider.Telephony.SMS_RECEIVED  

 

接著建立onReceive方法。

 

然後用getAction去監聽手機簡訊相關動態,利用StringBuffer來儲存簡訊資訊。

 

再然後主要代碼了。

view plain
  1. @Override  
  2.     public void onReceive(Context context, Intent intent) {  
  3.         if (intent.getAction().equals(ACTION)) {  
  4.             StringBuffer SMSAddress = new StringBuffer();  
  5.             StringBuffer SMSContent = new StringBuffer();  
  6.             Bundle bundle = intent.getExtras();  
  7.             if (bundle != null) {  
  8.                 Object[] pdusObjects = (Object[]) bundle.get("pdus");  
  9.                 SmsMessage[] messages = new SmsMessage[pdusObjects.length];  
  10.                 for (int i = 0; i < pdusObjects.length; i++) {  
  11.                     messages[i] = SmsMessage  
  12.                             .createFromPdu((byte[]) pdusObjects[i]);  
  13.                 }  
  14.                 for (SmsMessage message : messages) {  
  15.                     SMSAddress.append(message.getDisplayOriginatingAddress());  
  16.                     SMSContent.append(message.getDisplayMessageBody());  
  17.                 }  
  18.             }  
  19.         }  
  20.     }  

代碼中的SMSAddress為傳送簡訊的號碼,SMSContent為簡訊內容。

 

要想看到是否成功擷取,最簡單的方法就是把這兩個參數列印出來。

view plain
  1. System.out.println("發送號碼:" + SMSAddress + "\n" + "簡訊內容:"  
  2.                             + SMSContent);  

不過要把他們加入for迴圈中,因為當新資訊發來時,SMSAddress和SMSContent將被替換。

因此如果要是做應用時,也是在for迴圈中判斷的。

 

最後要記得在Manifest.xml中註冊監聽器。

view plain
  1. <receiver android:name="cn.etzmico.SMSBroadcastReceiver">  
  2.         <intent-filter>  
  3.             <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>  
  4.         </intent-filter>  
  5.     </receiver>  


同時要加上許可權。

view plain
  1. <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>  

 

這樣,我們運行程式後,只要有簡訊接收,SMSAddress和SMSContent就會被賦值。

 

 

這裡順便補充一個知識點,關於Eclipse程式的。

相信很多初學者不知道,Eclipse內建一個發簡訊外掛程式,可以實現給虛擬機器傳送簡訊。這樣,我們在做簡訊應用的時候,就不用同時啟動多台虛擬機器了……

如何操作呢?方法如下。

1.點擊功能表列中的 Window 視窗。

2.找到哦啊其中的 Show View 目錄。

3. 選擇 Other...。

然後我們發現會彈出一個視窗。

4,為了便於操作,我們在彈出的視窗的搜尋欄中,直接輸入 Emulator Control。

5.點擊列表中的 Emulator Control,再點OK;或者直接雙擊。

 

這樣就出現了一個視窗,其中有很多參數。

其他的以後有機會再做介紹,我們這次至用到其中4個。

,我們只需要輸入對應的參數,選擇需要的類型,最後點發送就可以了。

 

PS:有的人奇怪為什麼灰色,沒法輸入,沒法選擇,那是因為你沒有選中模擬器。這個外掛程式只能同時給一個模擬器發送訊息。關於模擬器的選擇,和調用Emulator Control的方法差不多,區別只是在輸入Emulator Control的時候輸入 Devices 就可以了。你當前選中哪個模擬器了,就會給哪個模擬器發送訊息,不需要輸入模擬器號碼。

 

 

 

 

簡訊即時刪除

 

 

 

首先,在Activity類中聲明 ContentResolver,且在onCreate中定義。

view plain
  1. static ContentResolver cr;  
  2. cr = getContentResolver();  

 

其次,Android的短息接收機制中,是先監聽到,然後存入收件匣以及在Notification中提示,系統監聽到簡訊後不會立刻存入收件匣和提示,因此在刪除時要特別注意。

view plain
  1. new Timer().schedule(new TimerTask() {  
  2.                             @Override  
  3.                             public void run() {                           
  4. <span style="white-space:pre">                            </span>//刪除簡訊代碼  
  5.                             }  
  6.                             }, 5000);  

我們可以做一個這樣的延時器,因為接收簡訊觸發簡訊接收類中 onReceive 方法時,收件匣裡並沒有資訊呢,即使把優先順序降到最低也無濟於事。
因此我們把刪除簡訊的方法做一個延時操作就可以了,根據本人測試,5秒為妙,因為很多機器會因為各種原因而早成系統運行慢……如果再長,機器更卡,那就再把事件增加一些就可以了……這裡的5000為5000毫秒,即5秒。

 

還有,我們為了避免簡訊刪除,我們可以做if判斷,給刪除簡訊方法添加條件。

view plain
  1. StringBuffer SMSAddress.append(message.getDisplayOriginatingAddress()); // 寄件者電話號碼  
  2. StringBuffer SMSContent.append(message.getDisplayMessageBody()); // 簡訊內容  

這樣,就不會造成簡訊的誤刪了。

 

最後再提示下Manifest.xml中的許可權問題,一共3個。

view plain
    1. <uses-permission android:name="android.permission.RECEIVE_SMS" />  
    2. <uses-permission android:name="android.permission.WRITE_SMS" />  
    3. <uses-permission android:name="android.permission.READ_SMS" />  
    4.  


http://blog.csdn.net/wop_niaoren19870227/article/details/7077765

 

簡訊(會話)刪除(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.