首页 > 系统 > Android > 正文

android短信拦截的实现代码

2019-10-24 20:43:10
字体:
来源:转载
供稿:网友
这篇文章介绍了android短信拦截的实现代码,有需要的朋友可以参考一下
 

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

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>  
 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表