android 仿微信来电_Android 悬浮窗功能实现(微信语音通话悬浮窗效果实现)
Android 界面绘制都是通过 WindowManager服务来实现的,WindowManager对象可通过获取 WINDOW_SERVICE 系统服务得到,并因为它是一个系统服务,所以我们不需要在 AndroidManifest.xml 文件中声明。WindowManager.LayoutParams 是窗口的布局参数,每个窗口都必须用它来设置自己的布局特性,我们可以通过设置这些参数来控制窗口的大小、位置等等。本文将使用 WindowManager 来实现仿微信语音通话悬浮窗效果。
4.1 需求分析及效果展示我们的目标是实现一个仿微信语音通话悬浮窗效果,具体来说,当用户接收到微信语音通话时,会弹出一个悬浮窗口,在悬浮窗口中显示来电人的信息,包括头像、姓名和来电时间。用户可以选择接听或挂断通话。
效果展示如下:
- 当用户收到微信语音通话时,会在屏幕上方弹出一个悬浮窗口,显示来电人的头像、姓名和来电时间。
- 用户可以通过点击悬浮窗口选择接听或挂断通话。
- 当通话接通或挂断后,悬浮窗口会自动消失。
4.2 实现4.2.1 悬浮窗权限申请在 AndroidManifest.xml 文件中添加悬浮窗权限的声明:
```xml
```
同时,在应用中动态申请悬浮窗权限:
```javaif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_OVERLAY_PERMISSION);
}
```
4.2.2 实现悬浮窗口的 Service首先创建一个悬浮窗口的 Service:
```javapublic class FloatingWindowService extends Service {
// 窗口管理器 private WindowManager mWindowManager;
// 悬浮窗布局参数 private WindowManager.LayoutParams mLayoutParams;
// 在 onCreate 方法中初始化 WindowManager 和悬浮窗布局参数 @Override public void onCreate() {
super.onCreate();
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mLayoutParams = new WindowManager.LayoutParams();
mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
mLayoutParams.format = PixelFormat.RGBA_8888;
mLayoutParams.gravity = Gravity.TOP|Gravity.START;
// 设置悬浮窗口的宽高 mLayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
// 设置悬浮窗口的初始位置 mLayoutParams.x =0;
mLayoutParams.y =0;
}
// 在 onStartCommand 方法中添加悬浮窗的显示和隐藏逻辑 @Override public int onStartCommand(Intent intent, int flags, int startId) {
// 根据传入的操作类型,显示或隐藏悬浮窗口 String action = intent.getAction();
if (action.equals("show")) {
showFloatingWindow();
} else if (action.equals("hide")) {
hideFloatingWindow();
}
return super.onStartCommand(intent, flags, startId);
}
// 显示悬浮窗口的方法 private void showFloatingWindow() {
// 初始化悬浮窗口的布局 View floatingView = LayoutInflater.from(this).inflate(R.layout.layout_floating_window, null);
// 将悬浮窗口添加到 WindowManager 中 mWindowManager.addView(floatingView, mLayoutParams);
}
// 隐藏悬浮窗口的方法 private void hideFloatingWindow() {
//从 WindowManager 中移除悬浮窗口 mWindowManager.removeView(floatingView);
}
// 其他逻辑处理...
@Nullable @Override public IBinder onBind(Intent intent) {
return null;
}
}
```
4.2.3 布局文件 layout_floating_window.xml创建悬浮窗口的布局文件 layout_floating_window.xml,用于显示来电人的头像、姓名和来电时间等信息。
```xml android:layout_height="wrap_content"> android:layout_width="80dp" android:layout_height="80dp" android:src="@drawable/default_avatar" android:layout_centerHorizontal="true"/> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="张三" android:layout_below="@id/image_avatar" android:layout_centerHorizontal="true"/> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="14:00" android:layout_below="@id/text_name" android:layout_centerHorizontal="true"/>
```
5. 最后在本文中,我们通过使用 WindowManager服务实现了仿微信语音通话悬浮窗效果。首先我们申请了悬浮窗权限,并创建了一个悬浮窗口的 Service,然后我们实现了显示和隐藏悬浮窗口的逻辑,并创建了悬浮窗口的布局文件用于显示来电人的信息。当用户接收到微信语音通话时,会弹出一个悬浮窗口,在悬浮窗口中显示来电人的头像、姓名和来电时间,用户可以选择接听或挂断通话。希望本文对你有所帮助,谢谢阅读!