android短信拦截的实现代码

 更新时间:2013年09月18日 14:36:01   作者:  
这篇文章介绍了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> 

相关文章

  • Android Studio 3.6 新特性一览(推荐)

    Android Studio 3.6 新特性一览(推荐)

    这篇文章主要介绍了Android Studio 3.6 新特性一览,本文图文并茂给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Android使用贝塞尔曲线仿QQ聊天消息气泡拖拽效果

    Android使用贝塞尔曲线仿QQ聊天消息气泡拖拽效果

    这篇文章主要为大家详细介绍了Android使用贝塞尔曲线仿QQ聊天消息气泡拖拽效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Flutter实现自定义筛选框的示例代码

    Flutter实现自定义筛选框的示例代码

    本文主要介绍了Flutter实现自定义筛选框的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • Android ViewBinding使用介绍

    Android ViewBinding使用介绍

    最近这段时间在学习Kotlin,突然发现谷歌已经把kotlin-android-extensions插件废弃,目前推荐使用ViewBinding来进行替代,接下来通过本文给大家分享Android使用ViewBinding的详细步骤,感兴趣的朋友一起学习吧
    2022-09-09
  • Android自定义view实现水波纹进度球效果

    Android自定义view实现水波纹进度球效果

    在我们的日常开发中自定义控件还是用的挺多的,设计师或者产品为了更好的漂亮,美观,交互都会做一些牛逼的ui效果图,但是最后实现的还是我们程序员啊。所以说 自定义view你还是得会的。
    2016-08-08
  • Android 零基础到精通之广播机制

    Android 零基础到精通之广播机制

    Android 提供了一套完整的 API,允许应用程序自由地发送和接收广播。发送广播需要借助之前学习的 Intent,而接收广播的方法则需要引入一个新的概念 —— BroadcasterReceiver
    2021-10-10
  • 玩转Kotlin 彻底弄懂Lambda和高阶函数

    玩转Kotlin 彻底弄懂Lambda和高阶函数

    这篇文章主要帮助大家彻底弄懂Lambda和高阶函数,玩转Kotlin,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Android中ConstraintLayout约束布局的最全详细解析

    Android中ConstraintLayout约束布局的最全详细解析

    ConstraintLayout是Google在Google I/O 2016大会上发布的一种新的布局容器(ViewGroup),它支持以灵活的方式来放置子控件和调整子控件的大小,下面这篇文章主要给大家介绍了关于Android中ConstraintLayout约束布局详细解析的相关资料,需要的朋友可以参考下
    2022-08-08
  • 详解Android中Handler的实现原理

    详解Android中Handler的实现原理

    这篇文章主要为大家详细介绍了Android中Handler的实现原理,本文深入分析 Android 的消息处理机制,了解 Handler 的工作原理,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Android如何解决虚拟按键栏遮挡问题

    Android如何解决虚拟按键栏遮挡问题

    这篇文章主要介绍了Android如何解决虚拟按键栏遮挡问题,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下
    2021-03-03

最新评论