`

android > 广播监听电话状态

 
阅读更多

新建一个广播

 PhoneStatReceiver.java

package talk.mft;

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 PhoneStatReceiver extends BroadcastReceiver{
    
    private static final String TAG = "PhoneStatReceiver";


    @Override
    public void onReceive(Context context, Intent intent) {
            //如果是拨打电话
    		//Log.d(TAG, intent.getAction()+"");
    		TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE); 
    		Log.d(TAG, "status:"+tm.getCallState());
    		Log.d(TAG,"tele_state:"+intent.getStringExtra(TelephonyManager.EXTRA_STATE)+"");
    		
    		  
    		
    		/*
            if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){                        
                    incomingFlag = false;
                    String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);        
                    Log.i(TAG, "call OUT:"+phoneNumber);                        
            }else{                         
                    //如果是来电
                    TelephonyManager tm = 
                        (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);                        
                    
                    switch (tm.getCallState()) {
                    case TelephonyManager.CALL_STATE_RINGING:
                            incomingFlag = true;//标识当前是来电
                            incoming_number = intent.getStringExtra("incoming_number");
                            Log.i(TAG, "RINGING :"+ incoming_number);
                            break;
                    case TelephonyManager.CALL_STATE_OFFHOOK:                                
                            if(incomingFlag){
                                    Log.i(TAG, "incoming ACCEPT :"+ incoming_number);
                            }
                            break;
                    
                    case TelephonyManager.CALL_STATE_IDLE:                                
                            if(incomingFlag){
                                    Log.i(TAG, "incoming IDLE");                                 
                            }
                            break;
                    } 
            }
            */
    		
    }
}

 

 

在manifest 里注册并 附加权限

     <application>............
		<receiver android:name=".x.x.PhoneStatReceiver">  
			<intent-filter>
				<action android:name="android.intent.action.PHONE_STATE"/>           
				<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
			</intent-filter>
		</receiver>        
    </application>
	<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>  
	<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
	<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>
	

 

 

 

 

电话状态监听

public class CallReady extends Activity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		//----------- phone status listen
		/* 取得电话服务 */
		TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
		//监听电话的状态
		telManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
		//=====
	}
	
	//挂断电话
	private void endCall()
	{
		try
		{
			//通过反射拿到android.os.ServiceManager里面的getService这个方法的对象
			Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
			//通过反射调用这个getService方法,然后拿到IBinder对象,然后就可以进行aidl啦
			IBinder iBinder = (IBinder) method.invoke(null, new Object[] {TELEPHONY_SERVICE});
			ITelephony telephony = ITelephony.Stub.asInterface(iBinder);
			telephony.endCall();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
	//
	PhoneStateListener listener = new PhoneStateListener(){	
		@Override  public void onCallStateChanged(int state, String incomingNumber) {
		      switch (state){
		        case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */
		        	if(onCreateFlag){
		        		Log.d(TAG,"xxxxxxxxx");//如果挂断
		        	}
		        	break;
		        case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */
		        	if(onCreateFlag && curentTime >= 1){
		        		Log.d(TAG,"gggggggggggg");//如果被接起
		        	}
		        	
		        	break;	
		        case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */
		        	 //Log.d(TAG,"rrrrrrrrrrrr");
		        	break;
		        default:
			break;
		      }
		super.onCallStateChanged(state, incomingNumber);
		}        	
	};
	//\

}

 

 

 

 

分享到:
评论

相关推荐

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

    在Android平台上,对电话状态的监听和拦截是一个需要特别权限和精确实现的敏感操作,这涉及到Android的权限管理、广播接收器(BroadcastReceiver)、事件监听机制以及电话状态的处理。以下知识点将详细介绍如何实现这...

    Android 利用广播监听usb连接状态(变化情况)

    在Android开发中,监听USB连接状态是一个常见需求,尤其是在涉及到需要与USB设备通信的应用场景中。当USB设备插入或者拔出时,应用程序可能需要执行相应的操作,比如启动服务、弹出提示信息等。为了实现这一功能,...

    Android通过使用广播监听网络状态的改变

    在Android系统中,开发者可以利用系统的广播机制来监听网络状态的变化。这是一项非常重要的功能,因为应用程序往往需要根据网络连接的状态来决定是否加载在线数据或者执行网络相关的操作。本篇文章将详细探讨如何在...

    Android中监听电话状态.zip

    在Android系统中,监听电话状态是一项重要的功能,它允许开发者获取到电话的实时信息,比如来电、去电、通话结束等事件。这项功能通常应用于电话录音、来电管理、短信拦截等场景。本教程将深入探讨如何在Android应用...

    android监听蓝牙设备的连接状态

    在Android平台上,监听蓝牙设备的连接状态是一项关键功能,它涉及到设备间的无线通信与数据交换。本文将深入探讨如何利用Android系统广播机制来实现这一目标。 首先,我们要明白蓝牙连接状态主要包括三种:未连接、...

    android 广播监听网络变化

    本文将详细介绍如何在Android中创建一个广播监听网络变化的机制。 首先,我们需要了解Android中的网络状态类型。Android提供了两种主要的网络连接类型:移动数据(Mobile Data)和Wi-Fi。此外,还有网络是否可用、...

    android Wifi状态监听管理公共类

    Register()方法可以注册一个监听wifi状态的广播接受者,需要用户传入一个实现抽象类的对象实现回调方法,包括监听Wifi打开和关闭,是否通过wifi连接到网络,是否连接到网络等;广播接受者接收到相应的wifi以及网络...

    安卓广播监听按键事件和屏幕熄屏亮屏监听

    至于屏幕状态的监听,Android系统提供了两个关键的广播Intent:ACTION_SCREEN_OFF和ACTION_SCREEN_ON。我们可以为这两个Intent注册BroadcastReceiver: ```java public class ScreenReceiver extends ...

    Android应用源码之中监听电话状态-IT计算机-毕业设计.zip

    4. **权限申请**:由于涉及用户的隐私,监听电话状态需要在AndroidManifest.xml中声明相应的权限,如`&lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&gt;`。没有这些权限,应用将无法正常监听...

    Android中动态注册广播监听者,监听网络变化

    总的来说,动态注册广播监听网络变化是一种灵活且实用的方法,可以帮助开发者在应用运行时实时监控网络状态,从而根据网络状况做出相应的业务处理。通过以上步骤,你可以实现Android应用对网络状态变化的动态监听...

    Android监听网络状态

    以下是一些关于“Android监听网络状态”的关键知识点: 1. **网络连接状态获取**:Android提供了`ConnectivityManager`类来获取和管理设备的网络连接状态。通过调用`getActiveNetworkInfo()`或`getAllNetworkInfo()...

    Android利用广播BroadCast监听网络的变化

    7. **权限申请**: 监听网络变化需要在AndroidManifest.xml中添加权限`&lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt;`,否则应用无法获取网络状态信息。 8. **测试与调试**: 为了...

    Android动态创建监听广播

    总结,动态创建BroadcastReceiver在Android开发中提供了更大的灵活性,可以按需创建和管理广播监听。通过正确注册和注销,我们可以轻松实现解锁、锁屏及安装事件的监听,从而实现特定的功能需求。在实际项目中,根据...

    Android-用于监听App前后台状态变化的工具类

    4. 反注册BroadcastReceiver:为了避免内存泄漏,记得在App退出或者不再需要监听状态变化时,使用unregisterReceiver()方法来取消注册BroadcastReceiver。 此外,ActivityMonitor可能还提供了其他辅助方法,比如...

    【Android】Android 监听网络状态+源代码

    - 自Android 8.0(API级别26)起,后台服务和广播接收器的使用受到限制,需考虑使用JobScheduler或Firebase云消息推送等替代方案来实现网络状态监听。 以上就是Android监听网络状态的基本方法和实现过程。通过这些...

    android Wifi 状态监听管理公共类

    Register()方法可以注册一个监听wifi状态的广播接受者,需要用户传入一个实现抽象类的对象实现回调方法,包括监听Wifi打开和关闭,是否通过wifi连接到网络,是否连接到网络等;广播接受者接收到相应的wifi以及网络...

    android全局事件监听器

    描述提到这个监听器“没有用任何的第三方库”,这意味着它是通过自定义实现来达到全局监听的目的,这通常会涉及到Android的广播接收器、观察者模式或者使用Android系统的组件进行扩展。 **全局监听器的实现方式:**...

    android拨号键盘及来去电监听

    对于监听电话状态,需要添加`READ_PHONE_STATE`权限,这样我们的应用才能访问电话的状态信息。在`onReceive()`方法中,通过`TelephonyManager`的`getCallState()`方法可以获取当前的电话状态,如IDLE(空闲)、...

    android 利用重力感应监听

    例如,检查来电状态通常需要监听PhoneStateListener或BroadcastReceiver,而权限方面则需要确保应用已经获得了ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限,因为Android 6.0及以上版本需要运行时权限。...

Global site tag (gtag.js) - Google Analytics