`
bk_lin
  • 浏览: 336562 次
社区版块
存档分类
最新评论

android 使用广播接收者监听短信和拦截外拨电话

阅读更多

如果你想监听自己或者别人接收到的短信,设置黑名单等功能,那么就需要以下功能监听短信,并进行提示或者响应的处理:


当系统收到短信时,会发出一个广播Intent,Intent的action名称为android.provider.Telephony.SMS_RECEIVED,该Intent存放了系统接收到的短信内容,我们使用名称“pdus”即可从Intent中获取到短信内容:

 

public class IncomingSMSReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

@Override

public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(SMS_RECEIVED)) {
    SmsManager sms = SmsManager.getDefault(); //得到短信管理器
    Bundle bundle = intent.getExtras();                        //得到意图中的bundle对象
    if (bundle != null) {
    Object[] pdus = (Object[]) bundle.get("pdus");     //得到名称为"pdus"的对象,是一个Object数组,里面的每一个元素为一个byte[]数组
    SmsMessage[] messages = new SmsMessage[pdus.length];  
    for (int i = 0; i < pdus.length; i++) messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
        for (SmsMessage message : messages){
            String msg = message.getMessageBody();    //短信内容
            String to = message.getOriginatingAddress(); //短信地址
            sms.sendTextMessage(to, null, msg, null, null);

   }

  }

 }

 }

 }

 

在AndroidManifest.xml文件中的<application>节点里对接收到短信的广播Intent进行订阅:


<receiver android:name=".IncomingSMSReceiver">

     <intent-filter>

         <action android:name="android.provider.Telephony.SMS_RECEIVED"/>

      </intent-filter>

</receiver>

 

在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->
<uses-permission android:name="android.permission.SEND_SMS"/><!-- 发送短信权限 -->

 

如果想在播出的电话加上特殊提示或者默认加上区号,12593优惠号等,那么就需要监听外拨的电话,并进行处理:

 

向外拨打电话时系统会发出一个有序广播,虽然该广播最终会被拔号器里的广播接收者所接收并实现电话拔打,但我们可以在广播传递给拔号广播接收者之前先得到该广播,然后清除传递给拔号广播接收者的电话号码,在拔号广播接收者接收到该广播时,由于电话号码为null,因此取消电话拔打。

public class OutgoingCallReceiver extends BroadcastReceiver {
     public void onReceive(Context context, Intent intent) {
           setResultData(null); //清除电话,广播被传给系统的接收者后,因为电话为null,取消电话拔打
      
          // 同样如果你想修改外拔的电话号码,可以这样做
          // String phone = getResultData();//得到外拔电话
          // setResultData(“12593”+ phone);//在电话前面加上12593
     }
}


接收外拔电话广播Intent,在AndroidManifest.xml文件中的<application>节点里订阅此Intent:
<receiver android:name=".OutgoingCallReceiver">
    <intent-filter android:priority="1">
         <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
    </intent-filter>
</receiver>
并且要进行权限声明:
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

分享到:
评论

相关推荐

    Android中采用广播接收者实现短信监控器、拦截外拨电话功能案例

    在这个“Android中采用广播接收者实现短信监控器、拦截外拨电话功能案例”中,我们将探讨如何利用BroadcastReceiver来监控手机中的短信和电话事件。 首先,我们需要创建一个BroadcastReceiver的子类,比如`...

    android实战 拦截史迪仔电话(android studio源程序工程)

    我们可能看到如何声明权限来监听来电,如`&lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&gt;`用于获取电话状态,`&lt;uses-permission android:name="android.permission.PROCESS_OUTGOING_...

    android中利用广播实现指定电话号码的短信的拦截 源码

    本示例中的"android中利用广播实现指定电话号码的短信的拦截 源码"是一个Android应用,它展示了如何通过创建自定义广播接收器来拦截并处理特定来源的短信。下面我们将深入探讨这一主题。 1. **广播接收器**:在...

    android 短信 发送 监听 拦截等自己写的demo

    本文将深入探讨如何实现短信的发送、监听和拦截,基于一个名为"SMSDemo"的项目实例。这个项目提供了完整的代码示例,帮助开发者理解并掌握这些核心功能。 首先,我们来看短信的发送。在Android中,发送短信通常使用...

    android 短信电话拦截

    在Android系统中,短信和电话拦截是一项重要的功能,它允许用户筛选不想要的来电和短信,提高生活和工作的效率,避免骚扰。Menutable Service则是一个与Android系统菜单相关的服务,可能涉及用户界面和系统级别的...

    android短信电话拦截实现

    在Android平台上,实现短信和电话拦截是一项常见的功能,主要用于安全应用、防骚扰软件以及系统级的权限管理。本文将深入探讨如何在Android中利用广播接收器(BroadcastReceiver)、服务(Service)以及菜单(Menu)...

    android实战 拦截史迪仔广播(android studio源程序工程)

    本项目“android实战 拦截史迪仔广播”是一个针对初学者的Android Studio源码工程,旨在通过实例教学如何创建和拦截广播。我们将探讨以下几个关键知识点: 1. **广播接收器(BroadcastReceiver)**:...

    SMS.rar_android_android sms_android 短信_短信拦截

    有序广播的特点是,广播接收者可以按照优先级顺序逐个处理,开发者可以通过在Manifest.xml中设置标签的priority属性来设定优先级。 三、有序广播与短信拦截 有序广播在处理短信拦截时非常关键。由于ACTION_SMS_...

    Android拦截接收短信

    在Android开发中,"Android拦截接收短信"涉及到的是BroadcastReceiver(广播接收器)的使用,以及对系统短信服务的监听。BroadcastReceiver是Android四大组件之一,用于接收系统或应用广播事件,比如接收到短信、...

    Android短信拦截源码

    8. **适配Android版本**: 从Android 4.3(API级别18)开始,系统不允许在非前台应用中拦截短信,因此对于这些版本,可能需要使用PendingIntent和Service来处理短信。 9. **Android Q及更高版本的限制**: 自Android ...

    广播接收者-1

    广播接收者是Android系统中的一种重要组件,它用于监听并响应系统或应用程序发出的各种广播事件。在Android应用开发中,广播接收者可以帮助我们实现后台运行的任务,即使应用没有在前台运行,也能接收到并处理相应的...

    android电话、短信黑白名单拦截、电话录音

    在Android平台上,开发电话和短信管理应用是一项常见的任务,其中包括对来电和短信进行黑白名单拦截以及电话录音功能。本文将详细解析如何实现这些功能,并提供相关的编程知识点。 首先,我们来了解一下电话拦截的...

    Android广播接收和发送

    广播接收者(BroadcastReceiver)是Android四大组件之一,它用于监听并响应系统或应用发送的广播消息。本文将深入探讨Android广播的发送与接收,以及相关的知识点。 **一、Android广播的基本概念** 1. **广播...

    android短信拦截

    这个主题主要涉及Android的权限管理、广播接收器、Intent过滤以及短信相关的API使用。以下是对这些知识点的详细说明: 1. **Android权限管理**: 在Android中,为了实现短信拦截,首先需要在`AndroidManifest.xml`...

    Android应用源码之电话、短信黑白名单拦截、电话录音.zip

    在Android平台上,开发一款能够实现电话、短信黑白名单拦截以及电话录音的应用,涉及到多个关键技术和API的使用。本文将深入探讨这些技术,并基于提供的源码进行解析。 首先,电话黑白名单拦截是Android应用中常见...

    Android四大组件——BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播

    在Android应用开发中,BroadcastReceiver(广播接收器)是四大组件之一,它是系统用来传递消息和事件的重要机制。BroadcastReceiver可以监听系统或应用程序发送的广播Intent,并在接收到广播时执行相应的操作。以下...

    Android应用源码之拦截软件,拦截电话,短信.rar

    通过分析源码,我们可以深入理解Android系统的权限管理、广播接收器以及电话管理和短信API的使用。 首先,电话拦截在Android中主要依赖于`BroadcastReceiver`,特别是`PhoneStateListener`。这个监听器允许应用获取...

    Android应用源码之拦截软件,拦截电话,短信.zip

    在Android平台上,开发一款能够拦截电话和短信的应用需要对Android系统的权限管理、广播接收者、意图过滤器以及通知系统有深入的理解。以下是对这个主题的详细解析: 首先,要实现电话拦截,我们需要利用到Android...

Global site tag (gtag.js) - Google Analytics