Android广播接实现监听电话状态(电话的状态,拦截)

作者:智慧云端日记 时间:2022-12-21 18:50:49 

首先我们来理解下 * 的机制。

Android的事件处理机制有两种:监听和回调。

A基于监听的事件处理

主要涉及三类对象:EventSource(事件源),Event(事件),EventListener(事件 * )

监听机制处理事件的流程图如下(委派式:Delegation):

Android广播接实现监听电话状态(电话的状态,拦截)

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
  • asp之家 软件编程 m.aspxhome.com