有序广播的优先级:

       发送有序广播的方法有:

   public void sendOrderedBroadcast(Intent intent,String receiverPermission)





       在接收有序广播时,能够自己为接收者指定优先级:

            静态注冊广播接收者时,在AndroidMainfest.xml文件里为<receiver>的<intent-filter>节点配置

 android:priority属性;

   动态注冊广播接收者时。调用IntentFilter对象的setPriority()方法;

   有序广播的优先级:

      优先级属性值越大,则优先级越高;

      优先级属性同样时,动态注冊的广播接收者优先级高于静态注冊的广播接收者。

      同为静态/动态注冊的广播接收者。且优先级同样时,越早注冊的优先级越高。

      同为静态注冊的广播接收者。且优先级同样,但归属于不同的应用程序时,

      按系统载入应用程序的先后顺序确定优先级(通常表现为按应用程序的包名排序);

   始终接收广播的方法:

       某些应用程序可能须要始终接收特定的广播。比如手机管理类软件,则须要始终接收主叫、

来电、短信等广播,为了正常接收到这些广播。且让自己的应用程序处于高优先级,一般会:

    使用一个静态注冊的广播接收者。接收开机广播;

    接收到开机广播后,启动一个Service在后台执行;

    在后台执行的Service中,动态的广播接收者,接收业务所需的广播。

    

            有序广播的传递

         中止有序广播

      在广播接收者中,调用abortBroadcast()则能够中止有序广播的继续传递。

      即优先级更低的BroadcastReceiver将不会收到该广播;

      须要注意的是:使用该方法仅能用于接收有序广播,假设接收普通广播时调用

      该方法则会导致程序异常。

 在广播接收者们之间传递数据:

       在有序广播的传递过程中,能够调用setResultXXX()系列方法设置数据,

比如:setResultData()、setResultExtras()等,并使用getResultXXX()系列方法获取这些数据。

管理呼出电话

    呼出电话的广播为:

         android.intent.action.NEW_OUTGOING_CALL

 对呼出电话的管理的原理:

        呼出电话是从拨号到呼叫的过程,当呼出电话时,系统会发出呼叫电话的有序广播,而且将须要呼叫的电话号码

使用setResultData()进行传递。处理程序接收到该广播后运行呼叫。

处理呼叫的程序接收该广播的优先级较低,因此,自己定义广播接收者。

在接收到呼出电话的广播后,改动setResult()传递的电话号码。就可以实现对呼出电话的管理。

对呼出的电话进行操作的实例:

Activity不用改动。默认状态就可以。

这里仅仅给出广播:

package com.example.chargecall;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent; public class OutReceiver extends BroadcastReceiver{ @Override
public void onReceive(Context context, Intent intent) {
// 改动呼出的电话号码:
/*能够对电话号码进行多种操作。假设想要禁止呼出的电话号码,能够直接设置为空值
*
* */
String number = getResultData();
number = "12345" + number;
setResultData(number); } }

在AndroidMainfest.xml中加入权限跟receiver:

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

<receiver android:name="com.example.chargecall.OutReceiver" >

            <intent-filter>

                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>

            </intent-filter>

        </receiver>

对呼入的电话进行拦截:

        拦截呼入电话的实现原理:

     当存在呼入电话时,系统发出例如以下广播:

           android.intent.action.PHONE_STATE

TeleohyManager是电话管理器,为其配置PhoneStateListener就可以监听相关状态(响铃、通话、空暇),且

该监听器的会调方法中可获取来电号码;

调用ITelephony接口定义的boolean endCall()方法就可以挂断电话。通过TelephonyManager的getTelephony()

方法就可以获得ITelephony接口的对象。

对呼入的电话进行操作的实例:

相同的。主界面使用默认的就可以,

给出广播:

package com.example.interceptcall;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import com.android.internal.telephony.ITelephony; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.RemoteException;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager; public class PhoneStateReceiver extends BroadcastReceiver {
TelephonyManager manager; @Override
public void onReceive(Context context, Intent intent) {
manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener listener = new InnerPhoneStateListener();
int events = PhoneStateListener.LISTEN_CALL_STATE;
manager.listen(listener, events); } private ITelephony getITelephony(){
ITelephony iTelephony = null;
Method method = null;
try {
method = TelephonyManager.class.getDeclaredMethod("getITelephony", (Class[])null);
method.setAccessible(true);
iTelephony = (ITelephony) method.invoke(manager, null);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return iTelephony;
}
private class InnerPhoneStateListener extends PhoneStateListener{ @Override
public void onCallStateChanged(int state, String incomingNumber) {
// TODO Auto-generated method stub
switch (state) {
case TelephonyManager.CALL_STATE_IDLE://空暇状态 break;
case TelephonyManager.CALL_STATE_OFFHOOK://通话状态 break;
case TelephonyManager.CALL_STATE_RINGING://响铃状态
if("15539187816".equals(incomingNumber)){//挂断电话
try {
getITelephony().endCall();
} catch (RemoteException e) {
e.printStackTrace();
}
}
break; }
super.onCallStateChanged(state, incomingNumber);
} }
}

因为不能识别ITelephony,还须要自己定义aidl接口,这样才干够,

ITelephony:

package com.android.internal.telephony;

interface ITelephony {
boolean endCall();
}

注意包名要使用这里边的包名,

相同,要把权限加到AndroidMainfest.xml中,还要把写好的广播加入到这里边。

广播BroadcastReceiver(2)的更多相关文章

  1. Android 广播 BroadcastReceiver

    Android 系统里定义了各种各样的广播,如电池的使用状态,电话的接收和短信的接收,开机启动都会产生一个广播.当然用户也可以自定义自己的广播. 既然说到广播,那么必定有一个广播发送者,以及广播接收器 ...

  2. Android广播BroadcastReceiver 二

    BroadcastReceiver: 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制.而BroadcastReceiver是对发送出来的 Broadcast进行过滤 ...

  3. Android广播BroadcastReceiver 一

    Android 系统里定义了各种各样的广播,如电池的使用状态,电话的接收和短信的接收,开机启动都会产生一个广播.当然用户也可以自定义自己的广播. 既然说到广播,那么必定有一个广播发送者,以及广播接收器 ...

  4. 发送广播BroadcastReceiver

    import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.vi ...

  5. 使用广播-BroadcastReceiver最详细解析

    女孩:BroadcastReceiver是什么呀? 男孩:Broadcast是广播的意思,在Android中应用程序之间的传输信息的机制,BroadcastReceiver是接收广播通知的组件,广播和 ...

  6. Android数据传递,使用广播BroadcastReceiver;

    Android数据传递有很多种,Intent意图传递或使用Bundle去传递,接口监听回调传递数据,也可以把数据保存起来,使用的时候去读取等等等...,"当你知道足够多的数据传递的方式之后, ...

  7. Android广播BroadcastReceiver

    Android 系统里定义了各种各样的广播,如电池的使用状态,电话的接收和短信的接收,开机启动都会产生一个广播.当然用户也可以自定义自己的广播. 既然说到广播,那么必定有一个广播发送者,以及广播接收器 ...

  8. 接收广播BroadcastReceiver

    Broadcast Receiver用于接收并处理广播通知(broadcast announcements).多数的广播是系统发起的,如地域变换.电量不足.来电来信等.程序也可以播放一个广播.程序可以 ...

  9. 035 Android 广播(BroadCastReceiver)

    1.介绍 2.实现方法 3.注册广播 (1)静态广播 在AndroidManifest.xml文件中注册广播 <intent-filter>为过滤器 <receiver androi ...

随机推荐

  1. UVa 170 - Clock Patience

    题目:Clock Patience游戏,将52张扑克牌,按时钟依次分成13组(中心一组),每组4张全都背面向上, 从中间组最上面一张牌開始.翻过来设为当前值,然后取当前值相应组中最上面的背过去的牌翻过 ...

  2. AnyForWeb告诉你什么才是“最好的”编程语言

    一被问到最好的编程语言是什么,专家们一定会异口同声的说,'世界上根本没有什么最好的,每一种编程语言都有它存在的意义和价值'. AnyForWeb认为,后半句所阐述的观点全然没错,但最好的也并不是不存在 ...

  3. 【MySQL】MySQL删除匿名用户,保证登录安全

    博客地址已迁往 www.virtclouds.com 原文地址 http://www.virtclouds.com/538.html 很多MySQL程序都会带有匿名登录的功能. 在刚刚安装完MySQL ...

  4. UVA 11825 Hackers’ Crackdown 状压DP枚举子集势

    Hackers’ Crackdown Miracle Corporations has a number of system services running in a distributed com ...

  5. 参照实验室这边案例做一个简单的maven webapp项目

    流程 : 首先写出一个简单的前端页面. 之后写配置文件.dao.domain等等,注意这里可以使用generator进行自动配置 实验室这边配置文件如下: 其实主要的配置文件就分为6“个”. appl ...

  6. vue项目中遇到的打印,以及处理重新排版后不显示echarts图片问题。

    1. 项目中用到的打印 页面: css: 控制好宽度一般A4 我调试的是794px多了放不下,小了填不满.当时多页打印的时候,一定要控制好每一个页面内容显示的高度不要超过一个页面,当然根据自己项目来. ...

  7. Rabbit MQ 学习 (二)

    接连上一篇 :安装Erlang环境 之后,这篇安装 Rabbit Server 官网下载安装包:http://www.rabbitmq.com/install-windows.html 打开安装一路下 ...

  8. Underscore模板的使用

    一.开篇 下载underscode.js 二.使用 <!DOCTYPE html> <html lang="en"> <head> <me ...

  9. 开发辅助 | 前端开发工程师对 UI设计、交互设计的认知

    1.UI 用户界面 UI:User Interfase 用户界面 UID:User Interfase Designer 用户界面设计师,多指移动 app 的界面设计: 2.一个合格的 UI 设计师, ...

  10. 使用Latex写book类型文本的体会

    晚上参考中科院上海交大清华北大等学校的模板,终于重新把博一时候没解决的问题解决了.中科院吴老师的CTeX论坛因为维护压力比较大不得不关了,查不到之前的Latex解决答案.经过一下午和一晚上的摸索,忽然 ...