Android自定义来电界面实现
场景需求
在手机来电时,有时不方便接听电话,希望能点触屏幕达到静音的效果,稍候再接听电话。
开发思路
首先得获得手机来电的事件,进而监听屏幕的点击事件,让手机铃声静音
困难点
手机来电事件,是系统中优先级最高的,第三方的应用无法更改系统自带的来电功能。
解决办法
查阅了网上一些通用的做法,下载了一些来电显示的应用,通过观察发现,目前大家的做法普遍是:
首先后台始终有一服务,监听来电事件,当来电时,跳转到第三方应用的界面,在此界面上进行来电
页面的优化,比如可以接听、挂断电话,界面做的比系统自带的更好看...其实此时系统自带的来电也在
后台跑着,只是如果在我们的应用中接听或挂断了电话,系统中的事件也就关了。
相关代码
![](/assets/blank.gif)
![](/assets/blank.gif)
1 public void onReceive(Context context, Intent intent) { 2 final Context ctx = context; 3 final ShowPref pref = ShowPref.getInstance(ctx); 4 /** 5 * 以什么方式显示界面 6 */ 7 final int showType = pref.loadInt(ShowPref.SHOW_TYPE); 8 9 telMgr = (TelephonyManager)ctx.getSystemService(Service.TELEPHONY_SERVICE); 10 switch (telMgr.getCallState()) { 11 case TelephonyManager.CALL_STATE_RINGING:// 来电响铃 12 System.out.println("....................主人,那家伙又来电话了...................."); 13 final String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 14 System.out.println("number:" + number); 15 16 if (number.length() == 11) { 17 synchronized (monitor) { 18 switch (showType) { 19 case ShowPref.TYPE_ACTIVITY: 20 new Handler().postDelayed(new Runnable() { 21 @Override 22 public void run() { 23 // TODO Auto-generated method stub 24 showActivity(ctx, number); 25 } 26 }, 1000); 27 break; 28 case ShowPref.TYPE_FULL_DIALOG: 29 new Handler().postDelayed(new Runnable() { 30 @Override 31 public void run() { 32 // TODO Auto-generated method stub 33 showWindow(ctx, number, 100); 34 } 35 }, 100); 36 break; 37 case ShowPref.TYPE_HALF_DIALOG:// 非满屏Dialog 38 default:// 默认显示半屏dialog 39 int value = pref.loadInt(ShowPref.TYPE_HALF_VALUE, 40 ShowPref.TYPE_HALF_DIALOG_DEFAULT); 41 final int percent = value >= 25 ? (value <= 75 ? value : 75) : 25; 42 new Handler().postDelayed(new Runnable() { 43 @Override 44 public void run() { 45 // TODO Auto-generated method stub 46 showWindow(ctx, number, percent); 47 } 48 }, 100); 49 break; 50 } 51 } 52 } 53 break; 54 case TelephonyManager.CALL_STATE_OFFHOOK:// 接听电话 55 break; 56 case TelephonyManager.CALL_STATE_IDLE:// 挂断电话 57 synchronized (monitor) { 58 switch (showType) { 59 case ShowPref.TYPE_ACTIVITY: 60 Utils.sendEndCallBroadCast(ctx); 61 break; 62 case ShowPref.TYPE_FULL_DIALOG: 63 case ShowPref.TYPE_HALF_DIALOG: 64 default:// 默认会显示半屏的dialog 65 closeWindow(ctx); 66 break; 67 } 68 } 69 break; 70 default: 71 break; 72 } 73 74 }
View Code
监听权限:
![](/assets/blank.gif)
![](/assets/blank.gif)
1 <!-- 挂断手机的权限 --> 2 <uses-permission android:name="android.permission.CALL_PHONE" /> 3 4 <!-- 读取手机状态的权限 --> 5 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 6 <!-- 系统级弹窗权限 --> 7 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 8 <!-- 解锁的权限 --> 9 <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 10 <!-- 亮屏的权限 --> 11 <uses-permission android:name="android.permission.WAKE_LOCK" /> 12 <!-- 网络操作的权限 --> 13 <uses-permission android:name="android.permission.INTERNET" /> 14 <!-- 读取网络状态 --> 15 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 16 17 <uses-permission android:name="android.permission.RESTART_PACKAGES" /> 18 19 <application 20 android:icon="@drawable/icon" 21 android:label="@string/app_name" > 22 <activity 23 android:name="com.likebamboo.phoneshow.MainActivity" 24 android:label="@string/app_name" > 25 <intent-filter> 26 <action android:name="android.intent.action.MAIN" /> 27 28 <category android:name="android.intent.category.LAUNCHER" /> 29 </intent-filter> 30 </activity> 31 <activity 32 android:name="com.likebamboo.phoneshow.OverLayActivity" 33 android:label="@string/app_name" > 34 </activity> 35 <!-- 注册监听手机状态 --> 36 <receiver android:name="com.likebamboo.phoneshow.PhoneStateReceiver" > 37 <intent-filter android:priority="1000" > 38 <action android:name="android.intent.action.PHONE_STATE" /> 39 </intent-filter> 40 </receiver> 41 42 <service 43 android:name="com.likebamboo.phoneshow.ScreenService" 44 android:label="@string/app_name" > 45 </service>
View Code
项目源码
源码.zip
转载于:https://www.cnblogs.com/aLaDing/p/4580918.html
Android自定义来电界面实现相关推荐
- Android N 来电界面
本流程图基于MTK平台 Android 7.0,普通来电,本流程只作为沟通学习使用 通过前面 Android 7.0 Phone_MT来电流程 的流程分析中我们可以发现,最后是将来电的信息和状态传送到 ...
- andriod 自定义来电界面功能实现的一些思考
转载:http://blog.csdn.net/likebamboo/article/details/14449881 由于近期所做一个项目需要做类似于"来电秀"的功能,所以上网搜 ...
- andriod 自定义来电界面功能实现的一些思考。
原创博文,转载请注明出处:http://blog.csdn.net/likebamboo/article/details/14449881 由于近期所做一个项目需要做类似于"来电秀" ...
- android自定义设置界面,Android开发之精仿QQ设置界面(自定义PreferenceActivity)
Android开发之精仿QQ设置界面(自定义PreferenceActivity) 时间:2011-12-05 10:25:06 来源:Android开发者门户 作者: 今天,再给大家分享一下QQ设置 ...
- android 自定义设置界面,Android 设置界面之 Preference
Android系统为设置界面的UI提供了一系列的接口,设置界面的部分和Activity是分离的,会有一个PreferenceScreen的对象 是根目录,在其中会包含CheckBoxPreferenc ...
- android自定义打电话界面,两种Android打电话实现方法
在android开发中,用户能够拨打电话是最基本的需求.俗话说"条条大路通罗马",实现拨打电话的方式有多种,今天,就提供最常用两种. 首先,拨打电话,对于用户来说,是一个耗费的操作 ...
- android 自定义关机界面,怎么定制Android关机界面
在Android系统中,长按Power键默认会弹出对话框让你选择"飞行模式","静音","关机"等功能.这些功能对于手机非常适用,但是对于机 ...
- android 自定义关机界面,android源码探索之定制android关机界面的方法
本文实例讲述了android源码探索之定制android关机界面的方法.分享给大家供大家参考.具体如下: 在Android系统中,长按Power键默认会弹出对话框让你选择"飞行模式" ...
- android notification应用之自定义来电通知
android notification应用之自定义来电通知 1.为了实现老板的各种要求 本人矜矜业业完成任务 随着这个软电话软件的日益完善 本来来电的时候是创建一条通知点亮屏幕 用户可以解锁屏幕后接 ...
最新文章
- 关于程序猿的学习方法的一些总结
- Nature:最强癌基因找到了,居然不在染色体上 | 华人领衔最新研究
- 华为合作oppovivo小米鸿蒙,华为鸿蒙成功的关键:要让小米、OPPO、VIVO都用上鸿蒙...
- ds18b20温度传感器 lcd C语言,C程序控制18B20测温及LCD显示源码打包
- Cpp 对象模型探索 / 静态局部对象只构造一次的原因和执行析构的方法
- css实现3D立方体旋转特效
- 信息学奥赛一本通(1401:机器翻译)
- 2013q3 android ios 用户接入网络方式pv占比分布,2012年移动互联网发展分析.pdf
- 为什么java button 不能用 显示红色_Java中的整型包装类值的比较为什么不能用==比较?原因是因为缓存...
- Django ORM QuerySet集合对象的特性
- 贺利坚老师汇编课程35笔记:[BX+SI]和[BX+DI]寻址
- SQL Server 数据库的创建
- oracle 12c PDB 数据库 和mybatis 数据库连接池 的连接问题
- Instagram后端架构
- turtle八边形绘制
- Array王锐大神力作:osg与PhysX结合系列内容——第5节 角色动画效果(上)
- Vue如何将baes64格式的图片转成普通格式
- iOS 自动布局报错:Unable to simultaneously satisfy constraints.
- 城固一中2021高考成绩查询,汉中市各高中2020年高考喜报成绩一览
- 当BIM遇见建筑,设计灵感无限,欣赏有趣的BIM建筑
热门文章
- 路由器wan口和lan口短接_我把无线路由器的LAN口和WAN口用一根网线连接起来...
- tess4j linux so文件,linux tesseract 安装及部署tess4j项目的常见问题
- 软件测试EVT阶段,BVT、EVT、DVT、PVT产品开发几个阶段
- 电脑硬件故障维护小全(十一)
- vscode+mobaxterm实现服务器图形显示
- 服务器装系统bios设置方法,联想装系统bios设置方法介绍
- Google Cloud 线上课堂 | 解析勒索软件攻击链,看 Google Cloud 如何破局
- IC集成电路 测试与验证的区别?
- SteamVR 2.0 Unity插件使用指南
- webpack是干什么用的,以及它的优点