Android之来电秀实现(二)

今天要说的主题是来电秀实现里面的电话接听与挂机,在这里我们需要用到ITelephony.aidl相关的一些文件,

如下图:


将如上文件导入到工程,去掉一些不需要的aidl关联,其中PhoneUtils是自己创建的,里面主要写的是调用接听和挂机函数。


		public static com.android.internal.telephony.ITelephony getITelephony() throws Exception {
    		Class clazz = Class.forName("android.os.ServiceManager");  
            Method getServiceMethod = clazz.getMethod("getService", String.class); 
            IBinder iBinder = (IBinder) getServiceMethod.invoke(null, Context.TELEPHONY_SERVICE);  
            ITelephony iTelephony = ITelephony.Stub.asInterface(iBinder);  
			return ITelephony.Stub.asInterface(iBinder);
		}

得到Itelphony后,里面有很多函数可以调用,下面说两个今天的主题,电话的接听和挂机,代码如下:


 
        /**
         * 接听电话
         * @param context
         */
        public static void answerRingingCall(Context context) {
    		try {
            	if(VERSION.SDK_INT > VERSION_CODES.GINGERBREAD){// android 2.3以上
            		try{
                        Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON);
        			    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));
        			    context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED");
            		}catch(Exception e){
                        Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON);
        			    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));
        			    context.sendOrderedBroadcast(buttonUp,null);
            		}
            	}else{
            		getITelephony().answerRingingCall();
            	}  
			} catch (Exception e) {
				LogUtils.e(e);
			}
        }
        
        /**
         * 挂机
         */
        public static void endRingingCall() {
        	try{
        		getITelephony().endCall(); 
        	}catch(Exception e){
        		LogUtils.e(e);
        	}
		}

在这里要说明一点,因为andoid版本众多,有部分兼容性问题,其中自Android 5.0以后 ,接听电话answerRingingCall就已经失效了,通过模拟耳机按键接听电话也不起作用了,5.0以后接听电话暂时没有更好的处理方式,对于上面的接听实现,5.0以前上面的接听函数还是正常起作用的。

转载于:https://www.cnblogs.com/jenly/p/5312354.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值