Android来电,显示悬浮窗
拦截来电消息的方式有两种:
1、通过接收广播消息。需要Context.registerReceiver(..., TelephonyManager.ACTION_PHONE_STATE_CHANGED);
2、通过注册监听器。需要TelephonyManager.listen(PhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
下面用第一种方法,进行演示!
AndroidManifest.xml
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/><receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
<pre style="font-family: 宋体; font-size: 9pt; background-color: rgb(255, 255, 255);">
注册监听器
mMyReceiver = new MyReceiver();Log.e(TAG, "registerReceiver() mMyReceiver=" + mMyReceiver);IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);intentFilter.setPriority(Integer.MAX_VALUE);Intent intent = registerReceiver(mMyReceiver, intentFilter);Log.e(TAG, "registerReceiver() intent=" + intent);
注销监听器
unregisterReceiver(mMyReceiver);Log.e(TAG, "unregisterReceiver() mMyReceiver=" + mMyReceiver);
实现监听器
public class MyReceiver extends BroadcastReceiver {public final String TAG = "MyReceiver";private WindowManager mWinMgr;private TextView mTxtView;public MyReceiver() {}@Overridepublic void onReceive(Context context, Intent intent) {Log.e(TAG, "intent.action=" + intent.getAction());if (intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {String phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);int state = telephony.getCallState();Log.e(TAG, "state=" + state + ",phoneNumber=" + phoneNumber);switch (state) {case TelephonyManager.CALL_STATE_RINGING:Log.e(TAG, "CALL_STATE_RINGING=" + state);mWinMgr = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);WindowManager.LayoutParams params = new WindowManager.LayoutParams();params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;params.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;params.width = WindowManager.LayoutParams.WRAP_CONTENT;params.height = WindowManager.LayoutParams.WRAP_CONTENT;params.format = PixelFormat.RGBA_8888;mTxtView = new TextView(context);mTxtView.setText("悬浮窗,来电号码:" + phoneNumber);//mTxtView.setBackgroundColor(0x00000000);mTxtView.setTextColor(0xFFFFFFFF);mWinMgr.addView(mTxtView, params);break;case TelephonyManager.CALL_STATE_OFFHOOK:Log.e(TAG, "CALL_STATE_OFFHOOK=" + state);if (mWinMgr != null) {mWinMgr.removeView(mTxtView);}break;case TelephonyManager.CALL_STATE_IDLE:Log.e(TAG, "CALL_STATE_IDLE=" + state);if (mWinMgr != null) {mWinMgr.removeView(mTxtView);}break;default:Log.e(TAG, "default state=" + state);if (mWinMgr != null) {mWinMgr.removeView(mTxtView);}break;}}}
}
效果
额外说明
将TextView替换成VideoView,便可以将文本显示替换成视频播放了。示例代码如下:
String path = Environment.getExternalStorageDirectory().getPath();Uri uri = Uri.parse(path + File.separator + "1.mp4");mView = new VideoView(context);mView.setVideoURI(uri);mView.start();
如果商用,还需要再考虑如果几点:
1、来电视频,可以从网络上获取,本次如果获取不及,应该本次取,下次用。
2、来电视频,跟原有的来电铃声有重叠,应该将原有铃声停掉。
3、来电视频的位置和大小,需要产品的角度,仔细考虑下。
参考:http://blog.csdn.net/forlong401/article/details/19126875
Android来电,显示悬浮窗相关推荐
- uniapp 来电显示悬浮窗插件(支持锁屏来电) Ba-CallerID
简介(下载地址) Ba-CallerID 是一款来电显示悬浮窗插件插件. 支持显示.隐藏 支持锁屏来电显示 支持自定义位置显示(上.中.下) 支持拖动(这版不支持,需要的话可以加) 支持申请.判断悬浮 ...
- Android无需权限显示悬浮窗, 兼谈逆向分析app
前言 最近UC浏览器中文版出了一个快速搜索的功能, 在使用其他app的时候, 如果复制了一些内容, 屏幕顶部会弹一个窗口, 提示一些操作, 点击后跳转到UC, 显示这个悬浮窗不需要申请android. ...
- Android越过悬浮窗权限显示悬浮窗
文/Shawon(简书作者) 原地址 http://www.jianshu.com/p/167fd5f47d5c ,经验证,此方法可以越过大多数手机的悬浮球权限. 但是对MIUI8无效,MIUI8中应 ...
- WindowManager解析(二)Android悬浮框无法弹出输入法的原因和无需权限显示悬浮窗
Android悬浮框无法弹出输入法 最近要研究悬浮窗方面的东西,遇到一个问题,我的悬浮窗里面有一个输入框,但是不弹出输入法,后来找到一个方法: 在WindowManager的实例获取方式不对,之前是这 ...
- android悬浮动态权限,android应用内悬浮窗-自动贴边,不需要权限!
简单基于注释的API来处理运行时6.0权限配置 热门度(没变化) 10.0/10 (没变化) ">10.0 活跃度(没变化) 0.8/10 (没变化) ">0.8 Wa ...
- Android中自定义悬浮窗
有时候,我们可能会需要制作一个始终悬浮的窗口显示一些关键信息.它独立于我们的页面,可以在不妨碍用户操作的情况下显示信息.这里我们就学习一下悬浮窗的做法. 1.WindowManager的常用方法 ge ...
- Android全屏悬浮窗画布,使用WindowManager实现Android悬浮窗
WindowManager介绍 通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得 WindowManager对象. 每一个WindowMan ...
- Android 实现Service悬浮窗监听实时网速
我们都知道Android 的Service一般情况下是没有界面的,也就是运行在后台看不见的地方,实际上Service也可以是可见的,这篇文章简单记录一下如何让Service可见. 在安卓8以后显示悬浮 ...
- 小米手机如何显示悬浮窗
每个android开发者最蛋疼的事情估计应该就是各种手机的适配兼容的问题了,特别是适配小米和魅族的,没办法,别人 有技术就是任性,我们只能忧伤的慢慢搞去. 今天做的应用悬浮窗在小米上不能出现(放在se ...
- Android纯java悬浮窗,android 悬浮窗
以重绘状态栏,遮盖状态栏为例:java 一.设置 WindowManager.LayoutParams 属性android public static WindowManager.LayoutPara ...
最新文章
- 长沙网络推广浅析影响网站收录的因素有哪些?该如何做的更好?
- Go安装web框架revel
- 处理业务代码中循环遍历出现的性能问题
- python进行linux编程,Python之函数进阶
- ROS入门笔记(四):ROS实践(小海龟仿真)— ROS Topics
- python标准数据库接口是_Python 数据库接口模块_python 数据库模块_python 数据库接口...
- HDOJ---1874 畅通工程续[最短路径问题-Dijkstra算法]
- 服务治理---限流(令牌桶算法)
- NDK开发简单demo
- Linux之Shell编程学习总结
- oracle dbca静默安装,dbca 静默安装
- 软件开发应遵循的原则
- 信息隐藏——二值图像的信息隐藏
- 语音信号处理初学者概念总结
- iOS安全-测试内容
- python123第五周随机密码生成_利用Python生成随机密码
- Android OpenCV实现文字识别
- JS特效教程,学完即精通
- 看到一个想收藏的的AJAX小列子
- 数据结构最短路径例题_《数据结构课程设计》最短路径问题实验报告
热门文章
- 小米/红米手机如何通过USB数据线把手机网络共享给电脑
- 简易四六级刷题网站(一键帮你对答案)
- 施普林格(Springer)免费书籍
- 变压器的这些特性,你了解多少?
- 基于JAVA东理咨询交流论坛计算机毕业设计源码+系统+数据库+lw文档+部署
- 目标检测---以制作yolov5的数据集为例,利用labelimg制作自己的深度学习目标检测数据集(正确方法)
- Ubuntu 安装sogo输入法
- 二叉搜索树(平衡二叉搜索树)
- w11 php 环境变量
- android自定义相机带方框,Android摄像头开发:拍照后添加相框,融合相框和图片为一副 图片...