转载:http://blog.csdn.net/likebamboo/article/details/14449881

由于近期所做一个项目需要做类似于“来电秀”的功能,所以上网搜索了一些相关资料,加上自己的一些想法,做了一个Demo。一下是我对该功能实现的一些想法,不对的地方欢迎各位指出。最后我会给出Demo 的源代码。

首先,Android系统的手机在监听到有电话呼入的时候会向系统发送电话状态改变的广播(android.intent.action.PHONE_STATE)。要想实现来电秀功能,必须在自己的程序中注册监听该广播。所以我们的程序大致功能就是通过监听该广播,当有电话呼入的时候显示自定义的界面。

以什么样的方式显示自定义的界面呢?主要有两种方式:

      1 .以Activity的形式显示界面。

这种方式就是当有来电时启动自己的Activity并使其位于系统来电界面的上方,完全遮住系统界面。这种方式的好处是可以完全根据自己的需求做界面,但是主要面临着以下几个主要问题:

(1) 如何使自己的Activity遮住系统的来电界面:Android系统中系统级的应用有着最高的优先级,自己的应用不可能比系统优先级高,所以我们没办法屏蔽系统来电界面,只能等系统来电界面显示之后再启动我们自己的Activity ,暂时的处理是:在我们的应用接收到来电广播的时候延迟一秒钟启动我们自定义的Activity,这时候系统的来电界面应该已经显示了,这样基本可保证我们的Activity位于系统来电界面之上。

(2) 使用自己的Activity如何接听或挂断电话:Android SDK并没有将系统接听或挂断电话的接口开放出来,但是却以.aidl(Android Interface Definition Language,Android接口定义语言,可以使应用程序跨进程访问其他类的方法)向其他应用开放了(源码位置:frameworks/base/telephony/java/com/android/internal/telephony),我们可以在程序中建立一个同样的.aidl文件,并在程序中以反射的方式获取所需要的方法,主要的就是endCall方法(拒接或挂断电话)和answerRingingCall方法(接听电话)。但是另外一个问题是调用answerRingingCall方法需要权限(android.permission.MODIFY_PHONE_STATE , 该权限可以使应用程序改变电话的状态) ,但是该权限在android2.3及以后的版本中被隐藏,只有系统级应用才能拿到,这样我们只能通过模拟手机插上耳机时通过耳机上的按钮接听电话的操作来接听电话(具体实现看http://yk8900.blog.163.com/blog/static/123183544201272835550952/ )。

(3) 按下接听键前实时从网络取数据:在2G网络(GSM, GPRS,EDGE)情况下,来电的时候一般会断网(没有详细测试)。在3G(CDMA2000[电信],WCDMA[移动],TD-CDMA[移动])或WIFI情况下来电的时候是不会断网的,所以如果要从网络取数据,必须是在3G或WIFI情况下使用来电秀。

(4) 兼容性问题:由于使用自定义的Activity涉及到比较多的android底层未开放的接口,而各大手机厂商为了生产有自己个性的手机都会在一定程度上修改android底层源码,所以各种ROM的情况不一样, 我们无法做到适配所有android手机(目前该方法在三星和魅族手机上测试正常)。

2.以系统级弹框形式显示界面。

这种方式是当有来电时弹出一个窗口浮于系统所有界面之上的形式。也就是和360显示来电归属地的方式一样。使用这种方式实现同样需要考虑的问题设置为全屏还是半屏:如果设置为全屏,那么需要自己实现接电话的流程,那么就和使用Activity显示界面面临同样问题。如果设置为半屏,需要面对的问题是:一般来说弹窗和主界面的焦点不能兼得,如果能够很方便地就使用户既能操作弹窗内部的控件又不影响用户点击来电主界面上的各个按钮,那么用这种方式无疑是最好的。

当然不管采用哪种方式我们都需要面对很多比较特殊的情况,比如,在接听电话过程中有另一个电话进来怎么处理;在双卡双待的情况下会不会出现问题;用耳麦上的按钮接听电话,在接听电话过程中拔出耳麦会不会有影响等等,以及一些其他的不可预见的情况。

 3.Demo运行的效果:

( 程序主界面可以选择以什么方式显示来电秀,并可以自定义)。

   

(选择弹窗的形式显示“来电秀”,高度设置了为75%)

(选择以Activity的形式显示来电秀)。

4 。DEMO下载地址。

http://download.csdn.net/detail/likebamboo/6518685

andriod 自定义来电界面功能实现的一些思考相关推荐

  1. andriod 自定义来电界面功能实现的一些思考。

    原创博文,转载请注明出处:http://blog.csdn.net/likebamboo/article/details/14449881 由于近期所做一个项目需要做类似于"来电秀" ...

  2. Android自定义来电界面实现

    场景需求 在手机来电时,有时不方便接听电话,希望能点触屏幕达到静音的效果,稍候再接听电话. 开发思路 首先得获得手机来电的事件,进而监听屏幕的点击事件,让手机铃声静音 困难点 手机来电事件,是系统中优 ...

  3. android 通话状态监听(自定义接听挂断按钮与通话界面,根据公司的业务逻辑可以实现自己的来电秀功能)...

    前言: 因为公司需求,要自定义一款来电秀的app当做周边产品来配合主营的app业务. 之前因为赶项目,没时间整理这块,现在项目告一段落了,现在回头看看感觉这个功能还是挺有意思的,比较有针对性.电话呼入 ...

  4. 系统通话界面 自定义来电显示

    上一篇文章写了使用WindowManager实现从自己的app界面拨打电话调用系统通话展示自定义布局.这一篇文章主要介绍一下使用BroadcastReceiver.Service配合WindowMan ...

  5. android notification应用之自定义来电通知

    android notification应用之自定义来电通知 1.为了实现老板的各种要求 本人矜矜业业完成任务 随着这个软电话软件的日益完善 本来来电的时候是创建一条通知点亮屏幕 用户可以解锁屏幕后接 ...

  6. Android N 来电界面

    本流程图基于MTK平台 Android 7.0,普通来电,本流程只作为沟通学习使用 通过前面 Android 7.0 Phone_MT来电流程 的流程分析中我们可以发现,最后是将来电的信息和状态传送到 ...

  7. Wix 安装部署(二)自定义安装界面和行为

    Wix 安装部署(二)自定义安装界面和行为 原文:Wix 安装部署(二)自定义安装界面和行为 上一篇介绍了如何联合MSBuild来自动生成打包文件和对WIX的一些初步认识,http://www.cnb ...

  8. android 仿微信demo————微信通讯录界面功能实现(移动端,服务端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  9. Andriod谷歌账号解锁功能

    转载自http://blog.csdn.net/u013656135/article/details/43274161 Andriod谷歌账号解锁功能,通常情况下不会显示,如果用户忘记密码,输错几次后 ...

最新文章

  1. 预发布环境,Tag发布机制和可重复的部署过程
  2. 比较不错的一个ios找茬游戏源码
  3. python快速上手 让繁琐工作自动化 英文版_入门python:《Python编程快速上手让繁琐工作自动化》中英文PDF+代码...
  4. 初学者Web介绍一些前端开发中的基本概念用到的技术
  5. C++ STL 容器之queue
  6. XPath解析xml文件、html文件
  7. 苹果cmsv10自适应高仿时光影院视频网站免费模板
  8. EBU 4202数电 LAB2 答案与解析
  9. 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第四章(3) 创建新工程
  10. 阿里邮箱怎么开通pop3服务器,云邮箱如何在IPAD上设置POP3/IMAP协议?
  11. 【零基础】量子纠缠图像问世,简单解读实验原理
  12. 西北农林科技大学计算机导师,信息工程学院-西北农林科技大学
  13. python:2019新年贺词的词云制作以及基于TF-IDF的关键词提取
  14. 现代经济感悟(4)-为什么一分钱一分货,两分货却要一块钱
  15. Origin——积分工具
  16. windows控制台命令合集
  17. Giv Svn Branch 操作
  18. 使用vs建立C/C++项目
  19. 《使命召唤》单机版详尽攻略
  20. iPhone11霸占高端手机市场,安卓手机难望其项背

热门文章

  1. 在Linux上部署各种软件总结
  2. Django项目实战 ----用户使用QQ登录
  3. 高频天线电路设计学习笔记
  4. 【PMP】应急计划,弹回计划,权变措施
  5. Redis重点六:怎么保证redis挂掉之后重启数据可以恢复?
  6. [EMQX-V3.4.6源码解析系列]-2-项目结构与代码入口
  7. 目标检测之小目标检测和遮挡问题
  8. 药物设计常用的方法 分子对接 虚拟筛选 等
  9. 前20强出炉! 第一轮评审成功举办
  10. PNG格式的数据结构