Android 采用广播接收者拦截外拨电话及其特性
来源:互联网 发布:yy挂机软件 编辑:程序博客网 时间:2024/05/18 02:15
拦截外拨电话
向外拨打电话时系统化发出一个有序广播,虽然该广播最终会被拨号器里的广播接收者所接收并实现电话拨打,但我们可以在广播传递给拨号广播接收者之前先得到该广播,然后和清除传递给拨号广播接收者的电话号码,在拨号广播接收者接收到该广播时,由于电话号码为null,因此取消电话拨打。
public class PhoneBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
//取得广播接收者的接收数据,即电话号码
String number = getResultData();
if("5556".equals(number)) {
setResultData(null);//清除电话号码,广播被传给系统的接收者后,因为电话为null,取消电话拨打。
}else {
//修改数据
number = "12593"+number;
//将修改后的电话号码设成新的电话号码
setResultData(number);
}
}
}
接收外拨电话Intent,在AndroidManifest.xml的<application>节点里订阅此Intent:
<receiver Android:name=".PhoneBroadcastReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>
并且要进行权限声明:
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
广播接收者的响应性
在Android中,每次广播消息到来时都会创建BroadcastReceiver实例并执行onReceive()方法,onReceive()方法执行完后,BroadcastReceiver的实例就会被销毁。当onReceive()方法在10秒内没有执行完毕,Android会认为该程序无响应。所以在BroadcastReceiver里不能做一些比较耗时的操作,否则会弹出ANR(Application No Response)错误对话框。如果需要完成比较耗时的工作,应该通过发送Intent给Seivice来完成。这里不能使用子线程来解决,因为BroadcastReceiver的生命周期很短,子线程可能还没有结束BroadcastReceiver就先结束了。BroadcastReceiver一旦结束,此时BroadcastReceiver所在的进程很容易在系统内需要内存时被优先杀死。因为它属于空进程(没有任何活动组件的进程)。如果它的所在进程被杀死,那么正在工作的子线程也会被杀死。所以采用子线程来解决是不可靠的
public class IncomingSMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context,Intent intent) {
//发送Intent启动服务,由服务来完成比较耗时的操作
Intent serivce = new Intent(context,XxxService.class);
context.startService(serivce );
}
广播接收者
除了短信到来广播Intent,Android还有很多广播Intent,如:开机启动、电池电量变化、时间已经改变等广播Intent。
接受电池电量变化广播Intent,在AndroidManifest.xml文件中的<application>节点里订阅此Intent:
<receiver android:name=".IncomingSMSReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BATTERY_CHANGED"/>
</intent-filter>
</receiver>
接收开机启动广播Intent,在AndroidManifest.xml文件中的<application>节点里订阅此Intent:
<receiver android:name=".IncomingSMSReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
并且要进行权限声明:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"
- Android 采用广播接收者拦截外拨电话及其特性
- 采用广播接收者拦截外拨电话及其特性
- Android开发入门之采用广播接收者拦截外拨电话及其特性
- Android:BroadcastReceiver:采用广播接收者拦截外拔电话、发送广播、其他常用广播、特性
- Android学习笔记_19_广播接收者 BroadcastReceiver及其应用_窃听短信_拦截外拨电话
- android 使用广播接收者监听短信和拦截外拨电话
- android 使用广播接收者监听短信和拦截外拨电话
- android 使用广播接收者监听短信和拦截外拨电话
- android 使用广播接收者监听短信和拦截外拨电话
- 广播接收者拦截电话
- android学习笔记---38_采用广播接收者拦截外拔电话,实现原理以及实例源码
- Android 拦截外拨电话
- 外拨电话广播
- Android入门:广播接收者应用(电话拦截器)
- Android入门:广播接收者应用(电话拦截器)
- Android入门:广播接收者应用(电话拦截器)
- 外拨电话广播,监听外拨电话
- Android之——拦截外拨电话
- 70. Climbing Stairs dynamic programming
- hibernate4配置c3p0连接池报错
- SDK更新不了问题解决
- php处理base64编码和Unicode客户端交互的问题[z]
- MFC:窗口和滚动条的基情
- Android 采用广播接收者拦截外拨电话及其特性
- Android常用开源项目(十七)
- 八部追踪法提取小圆点轮廓计算中心坐标
- 统计在某月某时间段工作的天数,除去周末
- 高级Java程序员 面试必备知识点概括
- 设置Elasticsearch
- RecycleView控件的使用(三) 实现上拉加载更多下拉刷新功能
- 《将博客搬至CSDN》
- 强化学习中同步动态规划和异步动态规划 Synchronous and Asynchronous dynamic programminging