由于近期所做一个项目需要做类似于“来电秀”的功能,所以上网搜索了一些相关资料,加上自己的一些想法,做了一个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. andriod 自定义来电界面功能实现的一些思考。

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

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

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

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

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

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

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

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

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

  7. Android N 来电界面

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

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

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

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

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

  10. Andriod谷歌账号解锁功能

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

最新文章

  1. 【GStreamer】gstreamer工具详解之:gst-discoverer-1.0
  2. oracle oats 安装,Mentor完整培训教程.pdf
  3. java单元测试覆盖率统计eclemma
  4. 从十个方面提升SharePoint网站性能
  5. form表单的两种提交方式,submit和button的用法
  6. django12:form 组件/渲染标签/数据校验/钩子函数/
  7. php如何判断二维数组为空,PHP判断数组为空的具体方式
  8. 性能优化之页面缓存(以Javascript方式缓存页面部件)
  9. [轉]PHP执行MYSQL存储过程报错:Commands out of sync; you can't run this command now 问题的解决...
  10. 通达信板块监控指标_板块监控及使用方法指标详解 通达信板块监控
  11. 经济基础知识(中级)【6】
  12. jzoj6152. 【GDOI2019Day2模拟2019.4.29】Endless (倍增维护并查集,平方串)
  13. java的正确学习姿势
  14. Java中常见的单词
  15. 如何实现微信二维码支付功能???
  16. VUE动态展示表格字段
  17. 用友NC65产品portal新增按钮
  18. 促销式软文在写作时风格要有创新
  19. WiFi模块的AP模式和STA模式
  20. 双缓冲异步日志(Async Logging)

热门文章

  1. Selenium模拟浏览器常见操作及问题
  2. yum文件,来自网络
  3. python爬虫百度文库_百度文库爬虫,Python爬取百度文库内容输出word文档low版
  4. mysql所选路径已经存在_5分钟安装好MySQL数据库(建议收藏)
  5. Html图片懒加载动画,带加载进度的Web图片懒加载组件Lazyload
  6. C、C++实现 -- 字符串分割函数split
  7. 一分钟教你在博客园中制作自己的动态云球形标签页
  8. 阿里巴巴 程劭非(寒冬)- 《浅谈前端交互的基础设施的建设》
  9. linux内核中创建线程方法
  10. 点击空白处隐藏指定dom元素(纯javascript方法)