Android 簡訊傳送監控
阿新 • • 發佈:2019-01-05
最近研究了一下如何對Android傳送簡訊進行監控,首先考慮到是否會有廣播機制,查了一下api文件發現沒有,到了網上查了半天也沒用解決辦法,主要問題還是Android沒有提供這中監聽機制,怎麼辦呢,誒,苦想了幾天,想到了一個還算可行的方法,但是隻能對系統簡訊進行監控,還是不能對第三方進行監控,沒辦法,好了下面介紹一下我的實現方法。主要是利用Android對contentProvider內容變化監聽方法實現ContentObserver類,
具體如下;
package com.listener.app; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Service; import android.content.ContentResolver; import android.content.Intent; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.os.IBinder; import android.util.Log; public class SmsStatus extends Service{ @Override public void onCreate() { //為content://sms的資料改變註冊監聽器 getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, new SmsObserver(new Handler())); super.onCreate(); } // ContentObserver監聽器類 private final class SmsObserver extends ContentObserver{ public SmsObserver(Handler handler){ super(handler); } public void onChange(boolean selfChange){ sendMsg(); } private void sendMsg(){ Cursor cursor = getContentResolver().query(Uri.parse("content://sms/outbox"), null, null, null, null); if (cursor.moveToFirst()){ StringBuilder sb = new StringBuilder(); // 獲取簡訊的傳送地址 sb.append("address=").append( cursor.getString(cursor.getColumnIndex("address"))); // 獲取簡訊的標題 sb.append('\n'+"subject=").append( cursor.getString(cursor.getColumnIndex("subject"))); // 獲取簡訊的內容 sb.append('\n'+"body=").append( cursor.getString(cursor.getColumnIndex("body"))); // 獲取簡訊的傳送時間 SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss"); Date d = new Date(Long.parseLong(cursor.getString(cursor.getColumnIndex("date")))); String date = dateFormat.format(d); sb.append('\n'+"time=").append(date); Log.e("msg", "Sent SMS:" + sb.toString()); } if(cursor!=null){ cursor.close(); cursor=null; } } @Override public IBinder onBind(Intent intent) { return null; } }
以上有幾點需要注意;
1,content必須為content://sms/不能改為content://sms/outbox,即系統只能對整個簡訊的content進行監控而不能對content中item進行監控
2,ContentObserver監聽時最好放置在service類中,以確保內容為時時監聽。