当前位置: 移动技术网 > IT编程>移动开发>Android > android短信拦截的实现代码

android短信拦截的实现代码

2019年07月24日  | 移动技术网IT编程  | 我要评论

日本柴犬,微博江湖 默默,贡水论坛

短信拦截的实现主要是使用了广播接收者来实现。

broadcastreceiver  广播接收者   必须指定要接收的广播类型。必须明确的指定action

 
广播:事件。
普通广播: 是异步的。会广播接收者同时接收,不能被中断
sendbroadcast()
有序广播: 是同步的。会根据广播接收的优先级进行接收,是可以中断   短信到来广播
sendorderbroadcast()
priority的范围是:-1000 ~ 1000
如果有序广播明确的指定了广播接收者,他是无法被中断的。

代码实现如下:

1、mainactivity

复制代码 代码如下:

package com.njupt.t4; 

import android.os.bundle; 
import android.app.activity; 
import android.content.intentfilter; 
import android.view.menu; 

public class mainactivity extends activity { 

    private smsreceiver receiver = new smsreceiver(); 
    @override 
    protected void oncreate(bundle savedinstancestate) { 
        super.oncreate(savedinstancestate); 
        setcontentview(r.layout.activity_main); 

        intentfilter filter = new intentfilter(); 
        filter.setpriority(997); 
        filter.addaction("android.provider.telephony.sms_received"); 
        registerreceiver(receiver,filter); 
    } 

    @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 
    protected void ondestroy() { 
        super.ondestroy(); 

        unregisterreceiver(receiver); 
    } 



2、smsreceiver
复制代码 代码如下:

package com.njupt.t4; 

import java.text.simpledateformat; 
import android.content.broadcastreceiver; 
import android.content.context; 
import android.content.intent; 
import android.os.bundle; 
import android.telephony.smsmanager; 
import android.telephony.smsmessage; 

public class smsreceiver extends broadcastreceiver { 

    @override 
    public void onreceive(context context, intent intent) { 

        system.out.println("章泽天是我老婆,老婆我成功了...."); 
        bundle bundle = intent.getextras(); 
        object[] objects = (object[]) bundle.get("pdus"); 
        for(object obj : objects){ 
            smsmessage smsmessage = smsmessage.createfrompdu((byte[])obj); 
            string body = smsmessage.getdisplaymessagebody(); 
            string address = smsmessage.getdisplayoriginatingaddress(); 
            long date = smsmessage.gettimestampmillis(); 

            simpledateformat format = new simpledateformat("yyyy-mm-dd hh:mm:ss"); 
            string datestr = format.format(date); 

            system.out.println(address +" 于  " + datestr + "给你发了以下内容: " + body); 

            if(address.equals("5558")){ 
                abortbroadcast(); 
                smsmanager smsmanager = smsmanager.getdefault(); 
                smsmanager.sendtextmessage("5556",null,address +" 于  " + datestr + "给你发了以下内容: " + body,null,null); 

            } 
        } 
    } 




 

3、androidmanifest.xml

需要在清单文件中注册上一下权限。(如果不注册是不会成功地拦截到短信的,在logcat中会以warn的

级别告诉你你没有相应的权限...)
复制代码 代码如下:

<uses-permission android:name="android.permission.receive_sms"/> 
   <uses-permission android:name="android.permission.send_sms"/> 
   <uses-permission android:name="android.permission.process_outgoing_calls"/> 


-----------------------------------------------------其实上面就是使用了代码的方式来注册broadcastreceiver-------------

其实还可以在androidmanifest.xml注册receiver这个组件(但是我采用这个方式总是会出现内存泄露的错误,所以下面的代码仅供参考)
复制代码 代码如下:

<receiver android:name=".smsreceiver"> 
            <intent-filter android:priority="1000"> 
                <action android:name="android.provider.telephony.sms_received"/> 
            </intent-filter> 
        </receiver> 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网