我们知道在API 23 之后,Google开放了 Telecom framework,这个框架允许第三方应用开发者编写应用来替换系统默认电话应用,但是目前还有一些定制产品使用的可能是API23之前的系统,如何替换系统通话UI呢?

目前我知道的有两个方法:
1、禁用系统通话界面应用(首选)
2、使用系统级别的View来覆盖系统通话界面

法一:

① 进入adb shell
② 输入命令 pm disable-user com.android.dialer (如果显示权限不够就使用root来操作)
③ 只要②没有报错,成功显示“Package com.android.dialer new state: disable-user”就可以隐藏了
④ 如何启用: pm enable com.android.dialer即可

法二:

需要这两个权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" /> 

核心代码:

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

// dialog_telephone_show 是自定义的弹窗xml
View topView = LayoutInflater.from(this).inflate(R.layout.dialog_telephone_show, null); 
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
// 设置类型为系统级别
layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
// 设置为全屏
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
// 设置透明背景
layoutParams.format= PixelFormat.RGBA_8888;
// 添加view到window中
windowManager.addView(topView, layoutParams);

在拨号的时候show即可