`
stephen830
  • 浏览: 3009863 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android 呼入电话的监听(来电监听)

 
阅读更多

android 呼入电话的监听(来电监听)

 

 

需要权限:

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

 

 

方式一:通过广播接收来电

 

定义来电广播接收类

 

package com.zhouzijing.android.demo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;

public class BroadcastReceiverMgr extends BroadcastReceiver {
	
	private final String TAG = MyBroadcastReceiver.TAG;

	@Override
	public void onReceive(Context context, Intent intent) {
		String action = intent.getAction();
		Log.i(TAG, "[Broadcast]"+action);
		
		//呼入电话
		if(action.equals(MyBroadcastReceiver.B_PHONE_STATE)){
			Log.i(TAG, "[Broadcast]PHONE_STATE");
			doReceivePhone(context,intent);
		}
	}
	
	/**
	 * 处理电话广播.
	 * @param context
	 * @param intent
	 */
	public void doReceivePhone(Context context, Intent intent) {
		String phoneNumber = intent.getStringExtra(
TelephonyManager.EXTRA_INCOMING_NUMBER);
		TelephonyManager telephony = 
(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
		int state = telephony.getCallState();
		switch(state){
		case TelephonyManager.CALL_STATE_RINGING:
			Log.i(TAG, "[Broadcast]等待接电话="+phoneNumber);
			break;
		case TelephonyManager.CALL_STATE_IDLE:
			Log.i(TAG, "[Broadcast]电话挂断="+phoneNumber);
			break;
		case TelephonyManager.CALL_STATE_OFFHOOK:
			Log.i(TAG, "[Broadcast]通话中="+phoneNumber);
			break;
		}
	}
}
 

定义Actitvity类

package com.zhouzijing.android.demo;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;

public class MyBroadcastReceiver extends Activity {
	public final static String TAG = "MyBroadcastReceiver";
	
	public final static String B_PHONE_STATE = 
TelephonyManager.ACTION_PHONE_STATE_CHANGED;
	
	private BroadcastReceiverMgr mBroadcastReceiver;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.my_broadcast_receiver);
	}	

	//按钮1-注册广播
	public void registerIt(View v) {
		Log.i(TAG, "registerIt");
		mBroadcastReceiver = new BroadcastReceiverMgr();
		IntentFilter intentFilter = new IntentFilter();
		intentFilter.addAction(B_PHONE_STATE);
		intentFilter.setPriority(Integer.MAX_VALUE);
		registerReceiver(mBroadcastReceiver, intentFilter);
	}
	
	//按钮2-撤销广播
	public void unregisterIt(View v) {
		Log.i(TAG, "unregisterIt");
		unregisterReceiver(mBroadcastReceiver);
	}
	
}
 

 

 

方式二:通过监听器来实现

 

package com.zhouzijing.android.demo;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;

public class MyBroadcastReceiver extends Activity {
	public final static String TAG = "MyBroadcastReceiver";
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.my_broadcast_receiver);
	}
	
	/**
	 * 按钮-监听电话
	 * @param v
	 */
	public void createPhoneListener(View v) {
		TelephonyManager telephony = (TelephonyManager)getSystemService(
Context.TELEPHONY_SERVICE);
		telephony.listen(new OnePhoneStateListener(),
PhoneStateListener.LISTEN_CALL_STATE);
	}
	
	/**
	 * 电话状态监听.
	 * @author stephen
	 *
	 */
	class OnePhoneStateListener extends PhoneStateListener{
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			Log.i(TAG, "[Listener]电话号码:"+incomingNumber);
			switch(state){
			case TelephonyManager.CALL_STATE_RINGING:
				Log.i(TAG, "[Listener]等待接电话:"+incomingNumber);
				break;
			case TelephonyManager.CALL_STATE_IDLE:
				Log.i(TAG, "[Listener]电话挂断:"+incomingNumber);
				break;
			case TelephonyManager.CALL_STATE_OFFHOOK:
				Log.i(TAG, "[Listener]通话中:"+incomingNumber);
				break;
			}
			super.onCallStateChanged(state, incomingNumber);
		}
	}
	
	

	
}
分享到:
评论
3 楼 码革裹尸 2016-12-06  
非常感谢,正好用上
2 楼 zwb 2013-11-15  
可以哦  谢谢lz
1 楼 david_je 2013-03-22  
貌似不行啊

相关推荐

    安卓Android源码——实现自动接听和挂断电话功能.zip

    4. **自动接听**:在电话状态变为`TelephonyManager.CALL_STATE_RINGING`时,表示有电话呼入。此时,可以调用`TelephonyManager`的`answerRingingCall()`方法接听电话。但要注意,由于安全原因,非系统应用可能无法...

    android 手机来电自动屏蔽代码

    在Android平台上,实现手机来电自动屏蔽功能涉及到对系统电话服务的深入理解和权限的获取。以下是一些关于如何在Android应用中实现这一功能的关键知识点: 1. **权限申请**: Android系统为了保护用户隐私,对涉及...

    android来电拒接Demo

    在这个来电拒接Demo中,我们创建一个BroadcastReceiver来监听电话相关的广播事件,特别是`TelephonyManager.ACTION_PHONE_STATE_CHANGED`这个事件,它会在电话状态改变时触发,如电话呼入、呼出或挂断。 2. **电话...

    自定义来电秀Demo

    "自定义来电"涉及到对系统服务的拦截和处理,这通常需要创建一个BroadcastReceiver来监听来电广播。当电话打入时,BroadcastReceiver会接收到这个广播,然后启动我们自定义的Service来显示自定义的来电界面。 `....

    Android自动接听电话程序

    在Android平台上,开发一个自动接听电话的程序涉及到多个核心知识点,包括权限管理、来电监听、系统服务、广播接收器以及电话API的使用。下面将详细阐述这些关键点。 首先,**权限管理**是Android应用程序的基础,...

    android 4 (实测4.3和4.4可以用) 响铃5秒后自动接电话

    当手机接收到电话呼入时,系统会发送一个ACTION_PHONE_STATE_CHANGED的广播,我们可以注册一个BroadcastReceiver监听这个广播,以便在电话状态改变时进行相应处理。 在`AndroidManifest.xml`文件中,我们需要声明...

    android短信电话防火墙

    1. **来电拦截**:通过监听电话状态广播,当电话呼入时,防火墙检查来电号码是否在黑名单中,如果匹配则阻止电话振铃或直接挂断。 2. **短信拦截**:对于短信,防火墙同样监听SMS_RECEIVED广播。一旦收到新短信,它...

    安卓Android源码——电话、短信黑白名单拦截、电话录音.zip

    - **BroadcastReceiver**:创建一个BroadcastReceiver,监听ACTION_PHONE_STATE广播,当有电话呼入时,接收广播并进行处理。 3. **短信拦截**: - **SMSBroadcastReceiver**:创建自定义的BroadcastReceiver,...

    Android高级应用源码-来电弹屏实例代码,带关闭按钮.zip

    通过注册`PhoneStateListener`或者监听`ACTION_PHONE_STATE_CHANGED`广播事件,可以在电话呼入时接收到通知。 2. **悬浮窗(Floating Window)**:来电弹屏的界面通常是一个悬浮在其他应用上方的窗口。在Android中...

    安卓Android源码——来电拦截及拦截后的提示音源码.zip

    在广播接收器的`onReceive()`方法中,我们可以获取到电话的状态信息,如电话是否正在呼入、呼出或挂断。如果判断是来电,并且满足拦截条件(例如黑名单、特定时间段等),则可以阻止电话的正常接听,达到拦截的效果...

    安卓 识别来电是否为被转移来电

    来电转移是一种电话服务,允许用户将呼入的电话自动转接到其他号码,无论是因为不在服务区、忙碌还是其他原因。本篇文章将深入探讨如何在Android系统上识别这类呼叫转移的来电,并介绍一个名为"Forwarded Call Alert...

    Android4.0通话流程总结+呼入+呼出+状态改变+UI发AT命令+远程挂断+本地挂断.rar

    Android 4.0的通话流程包括呼入、呼出、通话状态改变、AT命令的发送以及远程和本地挂断等关键环节。这些流程通常由多个组件协同完成,如电话服务(PhoneService)、RIL(Radio Interface Layer)、电话状态监听器...

    Android 来电拦截及拦截后的提示音源码.rar

    当有电话呼入时,系统会调用这个方法,我们可以在其中根据业务需求判断是否需要拦截来电。通常,拦截来电会涉及到权限问题,需要在`AndroidManifest.xml`中添加`READ_PHONE_STATE`和`WRITE_APN_SETTINGS`权限。 ...

    Android应用源码之来电弹屏实例代码,带关闭按钮.zip

    因此,首要步骤是创建一个BroadcastReceiver类,重写`onReceive()`方法,以便在电话呼入时触发我们的自定义行为。 ```java public class CallReceiver extends BroadcastReceiver { @Override public void ...

    Android call/calllog 详细流程图

    通话记录通常包括以下信息:通话时间、通话类型(呼入、呼出、未接)、对方号码、通话时长等。 用户可以通过系统设置或第三方应用查看通话记录。当请求通话记录时,应用会通过ContentResolver查询...

    android电话状态

    - INCOMING:来电状态,电话正被呼入。 - WAITING:等待接通,通常发生在多方通话或呼叫转移时。 - DISCONNECTED:通话已断开。 - DISCONNECTING:通话正在断开连接。 在GSMCallTracker中,系统会维护一个通话...

    手机来电归属地开发源码

    当电话呼入时,手机会接收到信号,这些信号包含了呼入电话所在的基站信息。通过比对数据库中的数据,可以确定该号码的归属地。数据库通常包含全国乃至全球的运营商信息、区号、城市信息等,以便进行精确匹配。 来电...

    android开发笔记.pdf

    接下来,让我们聚焦于电话呼入机制。在Android中,系统默认不允许直接通过API拒接电话,但开发者可以通过注册BroadcastReceiver来监听手机状态。当来电时,可以动态地拦截来电事件,阻止电话接听并进行其他自定义...

    android开发笔记[借鉴].pdf

    但是,电话呼入则没有类似的机制。综合网上的一些资料,通过以下大体的步骤,可以实现拒接电话: 1. 注册 BroadcastReceiver 监视手机状态,监听 android.intent.action.PHONE_STATE 动作。 2. 取得可以控制电话的 ...

    android通话通讯短信彩信

    开发者可以通过查询这个表来获取最近的呼入、呼出和未接来电记录。字段如`NUMBER`(电话号码)、`TYPE`(通话类型)和`DATE`(通话时间)是常用的数据项。例如,要列出最近的五个通话记录,可以执行一个SQL查询并按...

Global site tag (gtag.js) - Google Analytics