原创博文,转载请注明出处: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. Jquery empty() remove() detach() 方法的区别
  2. 矩阵的行列sum() Python
  3. 【完结】听完这12次分享,你应该完成了AI小白的蜕变
  4. hdu 5586(最大连续子序列和)
  5. pycache怎么用_如何用python3输出dos命令?
  6. yum提示Another app is currently holding the yum lock
  7. 网页设计(二)——HTML与BOX
  8. 二叉树非递归遍历算法
  9. iOS利用HealthKit获取健康里的步数和睡眠时间
  10. 方正快速开发平台ES2007(3.5版本)新增功能特点
  11. 厚度仅2.5毫米,重60克,英伟达斯坦福做出了超轻薄VR眼镜
  12. 店铺差评有什么影响原因有哪些方面,怎么避免差评,被差评了怎么解决
  13. CRM下午茶(九)-老客户挽回
  14. Docker 镜像和容器
  15. php程序员的出路,php程序员有前途吗
  16. 笔记之 02_传智播客AJAX视频教程_使用IntelliJ开发Web项目
  17. Excel COUNT COUNTA区别
  18. 【STM32】标准库与HAL库对照学习教程十三--软件IIC控制AT24C02
  19. android自带的nsd发现服务器,Android NSD(网络服务发现)是否与iOS中的Bonjour服务兼容?...
  20. C语言实战小项目(传统卡牌游戏)

热门文章

  1. chrome浏览器 firefox浏览器指定出口网卡进行上网 双网卡上网怎么配置
  2. OSChina 周三乱弹 —— 快来一起上班啦~
  3. unity3d学习笔记(九)--NGUI制作英雄和怪物的头像和血条
  4. 华为鸿蒙系统描述文件,华为鸿蒙HarmonyOS Beta3 2.0.0.101版
  5. matlab中plot和xlabel,matlab tips--plot之xlabel/ylabel
  6. 企业级管理软件快速开发平台技术白皮书
  7. C++蜘蛛纸牌,这绝对是一个专家级的挑战!
  8. 中低速航空航天电子总线概述
  9. POJ4001-模拟象棋
  10. Android Studio汉化包