Android新姿勢:如何截取簡訊

來源:互聯網
上載者:User

標籤:android   blog   http   io   sp   for   資料   on   問題   

公司要做一個【因為是機密所以不能說】的項目,有個需求是攔截手機系統的簡訊,而且不能在手機的簡訊應用上顯示。


OK,一開始以為不難,網上查了一下資料也發現有人做過,於是就開始寫demo,結果才發現,這尼瑪就是個大坑啊!!


首先網上查到的最多的實現方案是利用自訂的 BroadcastReceiver 去攔截"android.provider.Telephony.SMS_RECEIVED" 的廣播,看起來也不難,於是試了下。發現好坑爹啊!在我的酷派大神上無論怎麼樣就是攔截不到~

好吧,一定是我寫代碼的姿勢不對,所以又到網上查資料。


謔謔謔,我果然機智~~ 一下子就找到了!原來是我的優先順序不夠。

安卓的廣播是有優先順序的,並且動態註冊的廣播優先順序更高。於是參考網上說的,優先順序設到2147483647,又弄個動態註冊,然後興奮的用我的酷派再試一次——但還是不行!

詳見:http://www.apkbus.com/forum.php?mod=viewthread&tid=53053 


鬱悶,難道是我手機的問題?好吧,拿一個同事的2.3安卓機試了一下,還真的可以。。。難道真是手機問題?不行,多拿幾台試一下。於是再拿其他同事的手機了一下,也跟我一樣。那麼大概就可以確定了,是手機系統版本不一樣,因為其他同事都是4.0以上的手機。


好吧雖然原因找到,但總得想辦法解決是吧?


網上關於攔截簡訊的資料雖然比較少,不過還是有提到其他的方法的。另一個方法就是監聽資料庫發生變化時去刪除簡訊的資料。也就是在插入新資訊的時候把新資訊刪了,這樣也算是攔截。


網上的資料是註冊一個內容提供者監聽"content://sms/" 的資料變化,按照他寫的代碼試了,還是可以監聽到資料庫變化的。

詳見:http://bingtian.iteye.com/blog/641566

但是,在4.0以上系統cursor居然是空的(2.3的手機沒問題)!


TUT好坑爹啊!到底毛回事啊! 


好吧,耐心的我又想到另一個onChange(boolean selfChange, Uri uri),這個帶Uri參數的方法是高版本的安卓系統上才有的,所以我在這裡把uri列印了出來。結果發現列印出來的都是content://sms/910、content://sms/911之類的,根本就沒有content://sms/inbox。那麼也怪不得cursor是空的!


好吧,既然content://sms/inbox查不到,那我就查你給我的uri吧~


首先把該uri的欄位列印出來:

 _id;thread_id;address;m_size;person;date;date_sent;protocol;read;status;type;reply_path_present;subject;body;service_center;locked;sim_id;error_code;seen;ipmsg_id;ref_id;total_len;rec_len;itemInfoid;receive_date;

再跟2.3系統的content://sms/inbox欄位對比一下:

_id;thread_id;address;person;date;sc_timestamp;protocol;read;status;type;reply_path_present;subject;body;service_center;locked;error_code;seen;lgeMsgType;lgeSiid;lgeCreated;lgeExpires;lgeReceived;lgeAction;lgeSec;lgeMac;lgeDoc;doInstalled;lgePinRemainCnt;index_on_icc;service_msg_sender_address;modified;modified_time; 

有些欄位是不一樣的,不過一些主要的欄位如_id、address、body還是一樣的。

 

那麼要拿到簡訊的內容跟寄件者的號碼還是沒問題的,address就是寄件者號碼,body是簡訊內容。試了一下,可以拿到。


比較擔心的就是能不能刪除掉資料庫裡的這些簡訊,不過試了一下還是可以的~


就結果而言還不錯——成功的攔截到簡訊,並把簡訊刪掉了,系統雖然會“叮~”的一聲提醒來簡訊了,但是顯示的卻不是我剛發的簡訊,而是我上一次發的(剛發的已經被刪了)。


總結:既然不能在這棵樹上弔死,就多找幾課樹試試。

Android新姿勢:如何截取簡訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.