登录安卓传出短信 [英] Log outgoing SMS messages on Android

查看:161
本文介绍了登录安卓传出短信的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  

可能重复:
  听传出短信或发件箱

是否有可能在Android中截获传出的短信。我知道这是微不足道的接收短信并直接发送,但可以传出消息(例如,从默认的邮件应用程序或从另一个可能是恶意程序)进行检测,拦截或登录?所有我需要的是与呼出号码和消息一个简单的日志信息;我并不需要修改该消息。

使用这个是(在传出消息间谍)和黑幕既合法(即正在发送短信监控的应用程序)。我要为前者,而不是后者:)

解决方案

 对于**监控短信**输入/输出,而且状态**创建一流的**像这样
和**启动服务**的** **监测

公共类SMSMonitor
{
    私人的ServiceController mainActivity;
   私人ContentResolver的ContentResolver的= NULL;
   私人处理器smshandler = NULL;
   私人ContentObserver smsObserver = NULL;
   公共字符串smsNumber在这里输入code =;
   公共静态布尔thCountStatus = FALSE;
   公共静态INT thIncreCount = 0;
   公共布尔monitorStatus = FALSE;
   字符串code;
// Feedmanager FM = NULL;
   静态公共字符串激活code;
   INT smsCount = 0;

   公共SMSMonitor(最终的ServiceController mainActivity,最终上下文mainContext){
      this.mainActivity = mainActivity;
      ContentResolver的= mainActivity.getContentResolver();
      smshandler =新SMSHandler();
      smsObserver =新SMSObserver(smshandler);
   }

   公共无效startSMSMonitoring(){
      尝试 {
         monitorStatus = FALSE;
         如果(!monitorStatus){
            contentResolver.registerContentObserver(URI
                  .parse(内容://短信),真实,smsObserver);
         }
      }赶上(例外五){
         Log.d(测试,SMSMonitor :: startSMSMonitoring异常==+ e.getMessage());
      }
   }

   公共无效stopSMSMonitoring(){
      尝试 {
         monitorStatus = FALSE;
         如果(!monitorStatus){
            contentResolver.unregisterContentObserver(smsObserver);
         }
      }赶上(例外五){
         Log.e(测试,SMSMonitor :: stopSMSMonitoring异常==+ e.getMessage());
      }
   }

   类SMSHandler扩展处理程序{
      公共无效的handleMessage(最终报文MSG){
      }
   }

   类SMSObserver扩展ContentObserver {
      私人处理器sms_handle = NULL;
      公共SMSObserver(最终处理程序smshandle){
         超(smshandle);
         sms_handle = smshandle;
      }

      公共无效的onChange(最终布尔bSelfChange){
         super.onChange(bSelfChange);
         线程线程=新的Thread(){
            公共无效的run(){
               尝试 {
                  monitorStatus =真;

                  //发送邮件到活动
                  消息味精=新的Message();
                  sms_handle.sendMessage(MSG);
                  乌里uriSMSURI = Uri.parse(内容:// SMS);
                  光标CUR = mainActivity.getContentResolver()查询(
                        uriSMSURI,NULL,NULL,NULL,_id);

                  如果(cur.getCount()!= smsCount){
                     smsCount = cur.getCount();

                     如果(CUR = NULL和放大器;!&安培; cur.getCount()0){
                        cur.moveToLast();
                        的for(int i = 0; I< cur.getColumnCount();我++)
                        {
                           //日志(儿童安全,SMSMonitor ::传入列名:+
                              //cur.getColumnName(i));
                              //cur.getString(i));
                        }

                        smsNumber = cur.getString(cur.getColumnIndex(地址));
                        如果(smsNumber == NULL || smsNumber.length()< = 0)
                        {
                           smsNumber =未知;

                        }

                        整型=的Integer.parseInt(cur.getString(cur.getColumnIndex(类)));
                        字符串消息= cur.getString(cur.getColumnIndex(身体));
                        Log.d(测试,SMSMonitor ::短信类型==+型);
                        Log.d(测试,SMSMonitor ::消息文本==+消息);
                        Log.d(测试,SMSMonitor ::电话号码==+ smsNumber);

                        cur.close();

                        如果(类型== 1){
                           onSMSReceive(消息,smsNumber);
                        } 其他 {
                           onSMSSend(消息,smsNumber);
                        }
                     }
                  }
                  / *如果(cur.getCount()< smsCount){
                     日志(儿童安全,短信数最后::+ smsCount);
                     日志(儿童安全,SMS CUR计数最后::+ cur.getCount());
                     smsCount = cur.getCount();
                     日志(儿童安全,短信数最后::+ smsCount);
                  } * /
               }赶上(例外五){
//日志(儿童安全,SMSMonitor ::的onChange异常==+ e.getMessage());
               }
            }
         };
         thread.start();
      }

      私人无效onSMSReceive(最后的字符串消息,最终的串号){
         同步(本){
             Log.d(测试,在OnSmsReceive);
            Log.d(测试,消息+消息);
                               Log.d(样本,号码+号);
         }
      }

      私人无效onSMSSend(最后的字符串消息,最终的串号){
         同步(本){
             Log.d(测试,在OnSmsSend);
            Log.d(测试,消息+消息);
                               Log.d(样本,号码+号);
         }
      }
   }
}

//启动监视创建像下面服务
公共类的ServiceController扩展服务
{
   私人活动mainActivity;
   SMSMonitor短信;

   @覆盖
   公众的IBinder onBind(意向意图){

      返回null;
   }

   公共无效的onCreate()
   {
      super.onCreate();

      / ****开始听传出短信**** /
      Log.d(测试,######的ServiceController :: CallSMS监测方法######);
      短信=新SMSMonitor(这一点,mainActivity);
      sms.startSMSMonitoring();
   }

   @覆盖
     公共无效的onDestroy(){
        super.onDestroy();

        / ****,阻止听传出短信**** /
        Log.d(测试,######的ServiceController :: StopSMS监测方法######);
        sms.stopSMSMonitoring();
    }
}
 

Possible Duplicate:
Listen to outgoing SMS or sent box

Is it possible to intercept outgoing SMS messages in Android. I know it's trivial to receive SMS and send it directly but can an outgoing message (for example, from the default message app or from another possibly malicious app) be detected, intercepted or logged? All I need is a simple log message with the outgoing number and message; I do not need to modify the message.

Uses for this are both legitimate (monitor apps that are sending SMSs) and shady (spy on outgoing messages). I'm going for the former and not the latter :)

解决方案

For **monitoring sms** state in/out you have **create class** like this 
and **start service** for **monitoring**

public class SMSMonitor 
{
    private ServiceController mainActivity;
   private ContentResolver contentResolver = null;
   private Handler smshandler = null;
   private ContentObserver smsObserver = null;
   public String smsNumber enter code here= "";
   public static boolean thCountStatus = false;
   public static int thIncreCount = 0;
   public boolean monitorStatus = false;
   String code;
//   Feedmanager fm = null;
   static public String activationCode;
   int smsCount = 0;

   public SMSMonitor(final ServiceController mainActivity, final Context mainContext) {
      this.mainActivity = mainActivity;
      contentResolver = mainActivity.getContentResolver();
      smshandler = new SMSHandler();
      smsObserver = new SMSObserver(smshandler);
   }

   public void startSMSMonitoring() {
      try {
         monitorStatus = false;
         if (!monitorStatus) {
            contentResolver.registerContentObserver(Uri
                  .parse("content://sms"), true, smsObserver);
         }
      } catch (Exception e) {
         Log.d("test","SMSMonitor :: startSMSMonitoring Exception == "+ e.getMessage());
      }
   }

   public void stopSMSMonitoring() {
      try {
         monitorStatus = false;
         if (!monitorStatus) {
            contentResolver.unregisterContentObserver(smsObserver);
         }
      } catch (Exception e) {
         Log.e("test","SMSMonitor :: stopSMSMonitoring Exception == "+ e.getMessage());
      }
   }

   class SMSHandler extends Handler {
      public void handleMessage(final Message msg) {
      }
   }

   class SMSObserver extends ContentObserver {
      private Handler sms_handle = null;
      public SMSObserver(final Handler smshandle) {
         super(smshandle);
         sms_handle = smshandle;
      }

      public void onChange(final boolean bSelfChange) {
         super.onChange(bSelfChange);
         Thread thread = new Thread() {
            public void run() {
               try {
                  monitorStatus = true;

                  // Send message to Activity
                  Message msg = new Message();
                  sms_handle.sendMessage(msg);
                  Uri uriSMSURI = Uri.parse("content://sms");
                  Cursor cur = mainActivity.getContentResolver().query(
                        uriSMSURI, null, null, null, "_id");

                  if (cur.getCount() != smsCount) {
                     smsCount = cur.getCount();

                     if (cur != null && cur.getCount() > 0) {
                        cur.moveToLast();
                        for (int i = 0; i < cur.getColumnCount(); i++) 
                        {
                           //Log("KidSafe","SMSMonitor :: incoming Column Name : " +
                              //cur.getColumnName(i));
                              //cur.getString(i));
                        }

                        smsNumber = cur.getString(cur.getColumnIndex("address"));
                        if (smsNumber == null || smsNumber.length() <= 0)
                        {
                           smsNumber = "Unknown";

                        }

                        int type = Integer.parseInt(cur.getString(cur.getColumnIndex("type")));
                        String message = cur.getString(cur.getColumnIndex("body"));
                        Log.d("test","SMSMonitor :: SMS type == " + type);
                        Log.d("test","SMSMonitor :: Message Txt == " + message);
                        Log.d("test","SMSMonitor :: Phone Number == " + smsNumber);

                        cur.close();

                        if (type == 1) {
                           onSMSReceive(message, smsNumber);
                        } else {
                           onSMSSend(message, smsNumber);
                        }
                     }
                  }
                  /*if (cur.getCount() < smsCount) {
                     Log("KidSafe","SMS Count last:: " + smsCount);
                     Log("KidSafe","SMS cur Count last:: " + cur.getCount());
                     smsCount = cur.getCount();
                     Log("KidSafe","SMS Count last:: " + smsCount);
                  }*/
               } catch (Exception e) {
//                  Log("KidSafe","SMSMonitor :: onChange Exception == "+ e.getMessage());
               }
            }
         };
         thread.start();
      }

      private void onSMSReceive(final String message, final String number) {
         synchronized (this) {
             Log.d("test", "In OnSmsReceive");
            Log.d("test", "Message"+message);
                               Log.d("Sample", "Number"+number);
         }
      }

      private void onSMSSend(final String message, final String number) {
         synchronized (this) {
             Log.d("test", "In OnSmsSend");
            Log.d("test", "Message"+message);
                               Log.d("Sample", "Number"+number);
         }
      }
   }
}

//for starting monitor create a service like below
public class ServiceController extends Service
{
   private Activity mainActivity;
   SMSMonitor sms;

   @Override
   public IBinder onBind(Intent intent) {

      return null;
   }

   public void onCreate() 
   {
      super.onCreate();

      /**** Start Listen to Outgoing SMS ****/
      Log.d("test","###### ServiceController :: CallSMS Monitor method ######");
      sms = new SMSMonitor(this , mainActivity);
      sms.startSMSMonitoring();
   }

   @Override
     public void onDestroy() {
        super.onDestroy();

        /**** Stop Listen to Outgoing SMS ****/
        Log.d("test","###### ServiceController :: StopSMS Monitor method ######");
        sms.stopSMSMonitoring();
    }
}

这篇关于登录安卓传出短信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆