文档章节

广播接受者拦截短信和播出电话

chenruibing
 chenruibing
发布于 2015/05/27 19:13
字数 530
阅读 309
收藏 2

需要接受信息和播出电话的权限

广播接受者需要在配置清单里面注册,并且可以设置优先级和接收者关心的事件

广播拦截下来之后可以进行传递的信息的修改或者直接终止掉广播,终止了之后就相当于没有这个事情发生

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itheima.smsreceiver"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
 <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.itheima.smsreceiver.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!--  优先级从-1000到1000    1000是优先级最高的-->
        <receiver android:name="com.itheima.smsreceiver.SmsReceiver">
            <intent-filter android:priority="1000">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
          <!-- 配置广播接受者 -->
        <receiver android:name="com.itheima.smsreceiver.OutCallReceiver">
            <intent-filter android:priority="1000">
                <!-- 配置广播接收者关心的事件是外拨电话 -->
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>
有短信来了就触发关注短信事件的广播接受者

package com.itheima.smsreceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;

public class SmsReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		System.out.println("短信到来了。 。。。");
		//获取一组短信     有多条,所以是数组类型
		Object[] objs = (Object[]) intent.getExtras().get("pdus");//pdus短信的工业描述标准
		for (Object obj : objs) {
			// 得到短信对象         createFromPdu可以把pdus类型转化为短信对象
			SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
			//得到消息的内容
			String body = smsMessage.getMessageBody();
			//得到消息的发件人
			String sender = smsMessage.getOriginatingAddress();
			
			System.out.println("body:" + body);
			System.out.println("sender:" + sender);
			
			// 终止掉当前的广播。。也就是把短信拦截掉。   如果有服务器就把短信发送到你的服务器也可以,没有服务器的话就转发也行
			//对应的配置文件要设置为优先级最高,否则就没用
			if ("5556".equals(sender)) {
				abortBroadcast();
			}
		}
	}

}
当拨打出电话时就触发对播出电话事件关注的广播接受者

package com.itheima.smsreceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;

public class OutCallReceiver extends BroadcastReceiver {
	//当接收到消息对应的方法
	@Override
	public void onReceive(Context context, Intent intent) {
		String number = getResultData();
		if("5556".equals(number)){
			setResultData(null);
		}
	}
}



© 著作权归作者所有

chenruibing
粉丝 12
博文 203
码字总数 109101
作品 0
潮州
私信 提问
android 使用广播接收者监听短信和拦截外拨电话

如果你想监听自己或者别人接收到的短信,设置黑名单等功能,那么就需要以下功能监听短信,并进行提示或者响应的处理: 当系统收到短信时,会发出一个广播Intent,Intent的action名称为android...

长平狐
2012/09/03
923
0
BrodcastReceiver

BroadcastReceiver 广播接受者 他是在主线程中执行的,因此不能执行耗时操作两种定义方式1.在xml文件中定义- //类名 //短信接收优先级 public class SmsReceiver extends BroadcastReceiver {...

Thanks
2014/05/31
94
0
安卓短信过滤器小程序

对于安卓的短信广播接受者支持,谷歌应该在安卓4.2以后就开始弱化了,也就是配置起来较麻烦唯一,但是到了5.0的时候就应该完全不支持了。因为谷歌认为这种技术对用户个人隐私造成很大影响,事...

rootusers
2015/03/18
0
0
BroadCastReceiver(广播接收者的静态注册)简单使用例子

静态注册方式的特点:只要安装了静态注册的BroadCastReceiver应用,不管退不退出应用 广播接收者都在监听 //简单实现监听电话状态例子 静态注册方式的特点:只要安装了静态注册的BroadCastRe...

初来小修
2016/02/16
265
0
Android 短信拦截&来去电话拦截

一.短信拦截分为2种方式,其一是广播,其二是内容观察者 如何判断android 短信发送(sendTextMessage)是否成功 第一种是通过BroadcastReciver <uses-permission android:name="android.permi...

IamOkay
2015/09/06
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

JavaScript设计模式——适配器模式

  适配器模式是设计模式行为型模式中的一种模式;   定义:   适配器用来解决两个已有接口之间不匹配的问题,它并不需要考虑接口是如何实现,也不用考虑将来该如何修改;适配器不需要修...

有梦想的咸鱼前端
35分钟前
3
0
Andorid SQLite数据库开发基础教程(1)

Andorid SQLite数据库开发基础教程(1) Android数据库访问方式 SQLite是Android系统默认支持的文件数据库。该数据库支持SQL语言,适合开发人员上手。本教程将讲解如何开发使用SQLite的Andro...

大学霸
38分钟前
3
0
Handler简解

Handler 这里简化一下代码 以便理解 Handler不一定要在主线程建 但如Handler handler = new Handler(); 会使用当前的Looper的, 由于要更新UI 所以最好在主线程 new Handler() { mLooper = Lo...

shzwork
今天
4
0
h5获取摄像头拍照功能

完整代码展示: <!DOCTYPE html> <head> <title>HTML5 GetUserMedia Demo</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum......

诗书易经
今天
3
0
正向代理和反向代理

文章来源 运维公会:正向代理和反向代理 1、正向代理 (1)服务对象不同 正向代理服务器的服务对象是客户端,可以将客户端和代理服务器看作一个整体。 (2)配置方法不同 需要在客户端配置代...

运维团
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部