`
jenly
  • 浏览: 18485 次
文章分类
社区版块
存档分类
最新评论

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以前上面的接听函数还是正常起作用的。

分享到:
评论

相关推荐

    自定义来电秀Demo

    【自定义来电秀Demo】是一个Android应用开发项目,旨在展示如何通过编程技术实现完全自定义的来电显示界面。这个Demo的特色在于它不局限于系统默认的来电界面,而是提供了多种方式来显示用户自定义的界面元素,从而...

    Android开发应用源码-来电秀实现.zip

    【Android开发应用源码-来电秀实现.zip】这个压缩包文件是针对Android平台的一个来电秀应用的源码,主要用于帮助开发者学习如何在Android系统中实现个性化的来电显示功能。源码参考的价值在于它提供了实际的代码实现...

    android来电秀demo

    【Android来电秀Demo详解】 Android来电秀Demo是一个用于自定义来电显示界面的应用示例,它允许用户根据自己的喜好调整来电窗口的大小和其他视觉效果,从而为手机增添个性化色彩。在这个项目中,开发者将深入学习...

    android自定义来电秀设置

    总的来说,实现Android自定义来电秀涉及多个技术点,包括系统API的使用、UI设计、权限管理以及用户交互设计。开发这样一个应用需要扎实的Android编程基础,同时也是一次提升技能和创新思维的好机会。通过不断学习和...

    FloatView-master_rapidlyqnn_来电秀_android_

    【描述】"简单的android来电管家完整代码,安卓的自定义电话来电秀" 揭示了项目的实际功能。它是一个完整的Android应用代码,用于管理来电显示,允许开发者或用户定制来电时的界面效果,提供个性化体验。这个项目的...

    来电秀(手机功能支持文件)

    3. **操作系统支持**:不同的操作系统(如Android、iOS等)对来电秀的支持程度不同。有些系统可能需要安装额外的应用程序来实现这一功能,而有些则内置了来电秀支持。 4. **性能优化**:为了确保来电秀在接电话时能...

    Android代码-自定义Floatview实现全站浮动按钮和来电秀

    自定义floatview,无需申明悬浮框权限,利用WindowManager TYPE_TOAST实现全站浮动式按钮,重写touch事件实现任意拖动,将view加入windowmanager层,可以使用控件实现类似来电秀的效果。 MIUI使用TYPE_TOAST也会无效...

    安卓4.4录屏(需要root)

    - `android.permission.READ_PHONE_STATE`:在某些设备上可能需要,用于处理来电时停止录制。 - `android.permission.RECORD_AUDIO`:录音权限,因为录屏通常也包括音频。 2. **使用MediaRecorder类**:这是安卓...

    无需申明悬浮框权限效果

    作者AlexLiuSheng,源码FloatView,自定义floatview,无需申明悬浮框权限,利用WindowManager TYPE_TOAST实现全站浮动式按钮,重写touch事件实现任意拖动,将view加入windowmanager层,可以使用控件实现 类似来电秀的...

Global site tag (gtag.js) - Google Analytics