你是不是也在想——“鸿蒙这么火,我能不能学会?”
答案是:当然可以!
这个专栏专为零基础小白设计,不需要编程基础,也不需要懂原理、背术语。我们会用最通俗易懂的语言、最贴近生活的案例,手把手带你从安装开发工具开始,一步步学会开发自己的鸿蒙应用。
不管你是学生、上班族、打算转行,还是单纯对技术感兴趣,只要你愿意花一点时间,就能在这里搞懂鸿蒙开发,并做出属于自己的App!
📌 关注本专栏《零基础学鸿蒙开发》,一起变强!
每一节内容我都会持续更新,配图+代码+解释全都有,欢迎点个关注,不走丢,我是小白酷爱学习,我们一起上路 🚀
全文目录:
前言
悬浮窗功能通常用于应用需要提供全局可视化或交互界面,如聊天浮窗、悬浮助手、系统通知等。它通常覆盖在其他应用之上,能够随时显示或交互。鸿蒙操作系统为开发者提供了系统级悬浮窗的能力,可以用于构建智能工具、快捷操作和提升用户体验的应用。
本文将详细介绍如何在鸿蒙系统中实现悬浮窗功能,涉及Window API结构与使用方式、悬浮窗与系统权限申请流程、拖拽交互与自动吸边效果的实现、前后台管理与悬浮窗保活机制等方面。最后,我们将通过一个实际示例,展示如何实现一个智能工具悬浮助手。
Window API结构与使用方式
在鸿蒙系统中,悬浮窗是通过Window API来实现的,Window对象能够创建一个窗口并指定它在屏幕上的显示位置、大小和交互方式。悬浮窗的显示内容和用户交互可以通过Window API进行管理。
1. 创建悬浮窗
首先,您需要通过Window API来创建一个新的窗口,并设置其大小、位置等属性。以下是一个简单的示例,展示如何创建一个悬浮窗并将其显示在屏幕上。
// 获取WindowManager实例
WindowManager windowManager = WindowManager.getInstance();
// 创建Window属性
WindowConfig windowConfig = new WindowConfig();
windowConfig.setWidth(200); // 设置宽度
windowConfig.setHeight(100); // 设置高度
windowConfig.setPosition(500, 300); // 设置悬浮窗的位置
// 创建一个View作为悬浮窗的内容
TextView textView = new TextView(context);
textView.setText("悬浮窗");
Window window = windowManager.createWindow(windowConfig);
window.setContentView(textView);
// 显示悬浮窗
window.show();
在这个示例中,首先通过WindowManager获取一个WindowManager实例,然后创建一个WindowConfig配置对象,设置悬浮窗的尺寸和位置。接着,通过windowManager.createWindow()方法创建悬浮窗,并使用window.setContentView()设置显示的内容(这里是一个TextView)。最后,调用window.show()显示悬浮窗。
2. 控制悬浮窗的显示和隐藏
悬浮窗的显示和隐藏可以通过Window对象的show()和hide()方法来控制。例如,可以在特定的条件下隐藏悬浮窗,或者定时显示悬浮窗。
// 隐藏悬浮窗
window.hide();
// 显示悬浮窗
window.show();
悬浮窗与系统权限申请流程
由于悬浮窗属于系统级的操作,鸿蒙系统要求开发者申请相关的权限才能使用。应用必须申请并获得适当的系统权限,才能创建和操作悬浮窗。
1. 申请权限
在鸿蒙系统中,悬浮窗通常需要申请“系统窗口权限”。这类权限允许应用在其他应用的上层显示悬浮窗。申请权限的过程需要开发者在config.json文件中声明权限,并在运行时请求用户授权。
{
"permissions": [
{
"name": "ohos.permission.SYSTEM_ALERT_WINDOW"
}
]
}
在config.json文件中声明所需的权限后,应用可以在运行时通过PermissionUtil来动态请求权限。
2. 权限请求
动态申请权限:
// 动态请求悬浮窗权限
if (PermissionUtil.checkPermission("ohos.permission.SYSTEM_ALERT_WINDOW")) {
// 已获得权限,显示悬浮窗
window.show();
} else {
PermissionUtil.requestPermission("ohos.permission.SYSTEM_ALERT_WINDOW", new PermissionRequestCallback() {
@Override
public void onPermissionGranted() {
// 权限授权成功,显示悬浮窗
window.show();
}
@Override
public void onPermissionDenied() {
// 权限拒绝,显示提示信息
Toast.makeText(context, "权限被拒绝,无法显示悬浮窗", Toast.LENGTH_SHORT).show();
}
});
}
在这段代码中,首先使用PermissionUtil.checkPermission检查是否已经获得了SYSTEM_ALERT_WINDOW权限。如果没有,调用PermissionUtil.requestPermission请求权限,并在回调中处理权限授权的结果。
拖拽交互与自动吸边效果实现
悬浮窗通常需要支持拖拽功能,允许用户调整其位置。鸿蒙系统的Window API支持通过手势交互来实现拖拽效果。除此之外,为了提升用户体验,可以为悬浮窗添加自动吸边效果,使其在拖拽时自动吸附到屏幕边缘。
1. 实现拖拽功能
首先,您需要为悬浮窗设置拖拽事件监听器,通过监听触摸事件来更新悬浮窗的位置。
// 设置触摸监听器来处理拖拽
window.setTouchListener(new WindowTouchListener() {
@Override
public void onTouch(Window window, float x, float y) {
// 更新悬浮窗的位置
window.setPosition(x, y);
}
});
这段代码设置了一个触摸监听器,在用户拖拽悬浮窗时,通过window.setPosition(x, y)更新悬浮窗的坐标。
2. 自动吸边效果
为了实现自动吸附到屏幕边缘的效果,您可以在拖拽过程中判断悬浮窗的位置,并根据屏幕边缘的位置进行调整。
// 实现自动吸边效果
window.setTouchListener(new WindowTouchListener() {
@Override
public void onTouch(Window window, float x, float y) {
float screenWidth = WindowManager.getInstance().getScreenWidth();
float screenHeight = WindowManager.getInstance().getScreenHeight();
// 设置吸边距离,距离边缘小于50像素则自动吸附
if (x < 50) {
x = 0; // 吸附到左边
} else if (x > screenWidth - 50) {
x = screenWidth - window.getWidth(); // 吸附到右边
}
if (y < 50) {
y = 0; // 吸附到顶部
} else if (y > screenHeight - 50) {
y = screenHeight - window.getHeight(); // 吸附到底部
}
// 更新悬浮窗位置
window.setPosition(x, y);
}
});
这段代码会根据当前悬浮窗的位置和屏幕的边缘位置,自动将悬浮窗吸附到屏幕的边缘(左、右、上、下)。吸附的距离可以通过设置阈值来调整。
前后台管理与悬浮窗保活机制
悬浮窗通常需要在前后台切换时保持其显示状态。为了保证悬浮窗能够在后台应用中持续显示,开发者需要管理悬浮窗的生命周期,确保在用户切换应用或任务时,悬浮窗能够持续显示,并恢复到正确的位置。
1. 前后台管理
为了在应用切换到后台时保持悬浮窗的显示,可以使用ActivityLifecycleCallbacks监听应用的生命周期变化,并在应用切换到后台时保留悬浮窗。
// 监听应用生命周期
Application.getContext().getApplicationContext().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityResumed(Activity activity) {
// 应用恢复前台,显示悬浮窗
window.show();
}
@Override
public void onActivityPaused(Activity activity) {
// 应用进入后台,隐藏悬浮窗
window.hide();
}
// 其他生命周期方法...
});
2. 保活机制
为了确保悬浮窗在后台时能够持续运行,可以通过设置悬浮窗为系统窗口类型,避免系统回收该窗口。鸿蒙系统提供了相关API,允许将悬浮窗设置为系统级窗口,防止在系统资源紧张时被关闭。
// 设置窗口类型为系统级窗口,确保悬浮窗不会被系统回收
window.setWindowType(WindowType.SYSTEM_ALERT_WINDOW);
示例:实现一个智能工具悬浮助手
假设我们要实现一个智能工具悬浮助手,提供快速访问的便捷功能。该悬浮助手包括一个按钮,可以悬浮在屏幕上并提供快速打开其他应用的功能。
1. 创建悬浮窗内容
首先,我们创建悬浮窗的内容,假设悬浮助手是一个按钮,用户点击按钮后执行相应的操作。
// 创建悬浮窗内容
Button floatingButton = new Button(context);
floatingButton.setText("快速助手");
floatingButton.setOnClickListener(view -> openApp());
// 创建窗口配置
WindowConfig windowConfig = new WindowConfig();
windowConfig.setWidth(200);
windowConfig.setHeight(100);
windowConfig.setPosition(500, 300);
// 创建并显示悬浮窗
Window floatingWindow = windowManager.createWindow(windowConfig);
floatingWindow.setContentView(floatingButton);
floatingWindow.show();
2. 实现应用启动功能
点击按钮后,打开目标应用:
// 打开指定应用
public void openApp() {
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.targetapp", "com.example.targetapp.MainActivity"));
context.startActivity(intent);
}
通过这个简单的实现,我们创建了一个智能工具悬浮助手,能够提供快速打开其他应用的功能。
结语
通过鸿蒙系统的Window API和相关权限管理机制,开发者可以方便地创建并管理系统级悬浮窗。结合拖拽交互、自动吸边效果、前后台管理和悬浮窗保活机制,我们可以构建出更加智能和高效的悬浮窗应用,提升用户体验。在实际开发中,合理地使用权限、生命周期管理和用户交互机制,能够确保悬浮窗在各种场景下都能稳定、持久地运行。
❤️ 如果本文帮到了你…
- 请点个赞,让我知道你还在坚持阅读技术长文!
- 请收藏本文,因为你以后一定还会用上!
- 如果你在学习过程中遇到bug,请留言,我帮你踩坑!
1853

被折叠的 条评论
为什么被折叠?



