Android广播接实现监听电话状态(电话的状态,拦截)
作者:智慧云端日记 时间:2022-12-21 18:50:49
首先我们来理解下 * 的机制。
Android的事件处理机制有两种:监听和回调。
A基于监听的事件处理
主要涉及三类对象:EventSource(事件源),Event(事件),EventListener(事件 * )
监听机制处理事件的流程图如下(委派式:Delegation):
1:需要在AndroidManifest.xml清单中添加权限
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
2:注册广播 要注意事件的级别 (android中的级别-1000~1000)
<receiver android:name=".PhoneBroadcastReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
详细配置请看 AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zyw.broadcastsendsms"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".SendSMS"
android:label="@string/title_activity_send_sms" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".PhoneBroadcastReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>
3:编写广播的实现类 这里需要继承BroadcastReceiver 实现onReceive()方法
程序的源代码如下:
package com.zyw.broadcastsendsms;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
public class PhoneBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "message";
private static boolean mIncomingFlag = false;
private static String mIncomingNumber = null;
@Override
public void onReceive(Context context, Intent intent) {
// 如果是拨打电话
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
mIncomingFlag = false;
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.i(TAG, "call OUT:" + phoneNumber);
} else {
// 如果是来电
TelephonyManager tManager = (TelephonyManager) context
.getSystemService(Service.TELEPHONY_SERVICE);
switch (tManager.getCallState()) {
case TelephonyManager.CALL_STATE_RINGING:
mIncomingNumber = intent.getStringExtra("incoming_number");
Log.i(TAG, "RINGING :" + mIncomingNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
if (mIncomingFlag) {
Log.i(TAG, "incoming ACCEPT :" + mIncomingNumber);
}
break;
case TelephonyManager.CALL_STATE_IDLE:
if (mIncomingFlag) {
Log.i(TAG, "incoming IDLE");
}
break;
}
}
}
/*@Override
public void onReceive(Context context, Intent intent) {
String number = getResultData();
if("5556".equals(number)){
setResultData(null);//挂断
}else{
number = "12593"+ number; //其他,则加区号
setResultData(number);
}
}*/
}
以上内容给大家介绍了Android广播接实现监听电话状态(电话的状态,拦截)的相关知识,希望对大家有所帮助!
标签:android,监听,电话,状态
0
投稿
猜你喜欢
SpringCloud学习笔记之SpringCloud搭建父工程的过程图解
2022-10-28 02:38:30
Java多线程 CompletionService
2022-08-19 18:51:32
TextView显示系统时间(时钟功能带秒针变化
2022-04-23 08:07:37
Springboot添加支付接口
2023-06-21 00:10:20
Android线性布局与相对布局的实现
2021-07-26 09:08:01
Spring Boot + Thymeleaf + Activiti 快速开发平台项目 附源码
2023-11-23 08:23:43
详解基于java的Socket聊天程序——客户端(附demo)
2021-06-28 04:19:54
Android 使用gradle打包Assets目录的案例
2023-08-05 22:29:45
android 网络请求库volley方法详解
2022-01-01 01:34:30
C语言实现扫雷小游戏的示例代码
2022-05-21 13:05:18
Android 情景模式的设置代码
2023-09-23 07:26:37
三分钟快速掌握Java中枚举(enum)
2023-11-27 09:46:30
聊聊关于Java方法重写的反思
2022-10-26 00:36:12
C#实现在前端网页弹出警告对话框(alert)的方法
2022-02-17 11:05:12
java判断回文数示例分享
2023-03-20 03:18:22
IDEA 2020.1 搜索不到Chinese (Simplified) Language Pack EAP,无法安装的问题
2023-11-10 23:54:01
Android clipChildren属性实例详解
2022-12-29 02:35:50
java实现模仿斗地主发牌
2021-07-21 07:45:11
比较有效的使用C#读取文件的代码
2022-11-07 08:43:34
XListView实现下拉刷新和上拉加载原理解析
2022-02-16 06:47:52