android短信拦截的实现代码

所属分类: 软件编程 / Android 阅读数: 1729
收藏 0 赞 0 分享

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

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> 

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多