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);}}《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的Android从普通发送和接收短信到对短信进行拦截的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android中对APK进行反编译
- 下一篇: Linux下的一些问题收集及解决方法(一