如何在Android桌面上实现悬浮窗显示录屏时间控制的效果?

Android桌面悬浮窗显示录屏时间控制效果

如何在Android桌面上实现悬浮窗显示录屏时间控制的效果?

在现代移动应用开发中,Android悬浮窗技术被广泛应用于各种场景,悬浮窗可以显示在手机桌面上,提供便捷的实时信息和交互体验,本文将详细介绍如何通过实现一个悬浮窗来显示录屏时间的控制效果,以下是具体实现步骤和技术细节。

一、悬浮窗布局设计

悬浮窗的布局文件record_screen_time_float.xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/corners_bg"
        android:paddingBottom="3dp"
        android:paddingTop="3dp"
        android:paddingLeft="15dp"
        android:paddingRight="8dp"
        android:layout_gravity="center"
        android:gravity="center">
        <TextView
            android:id="@+id/record_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="00:00"
            android:textColor="#ffffff"
            android:textSize="10dp" />
        <View
            android:layout_width="2dp"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:background="#ffffff" />
        <LinearLayout
            android:id="@+id/stop_record"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <ImageView
                android:id="@+id/record_hint_button"
                android:layout_width="10dp"
                android:layout_height="10dp"
                android:layout_marginRight="5dp"
                android:background="#FF4040" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="结束"
                android:textColor="#ffffff"
                android:textSize="10dp" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

该布局包含三个主要部分:

1、时间显示TextView record_time):显示当前录屏时长。

2、分隔线View):用于视觉上的分隔。

3、结束按钮LinearLayout stop_record):包含一个红色提示按钮和一个“结束”文本,用于停止录屏操作。

如何在Android桌面上实现悬浮窗显示录屏时间控制的效果?

二、悬浮窗服务实现

为了管理悬浮窗,我们需要创建一个后台服务FloatWindowService,并在其中启动一个线程或Handler来持续更新时间,以下是一个简单的服务类示例:

public class FloatWindowService extends Service {
    private WindowManager windowManager;
    private View floatView;
    private TextView recordTime;
    private CountDownTimer countDownTimer;
    private long totalTimeInMilliseconds = 3600000; // 假设总时间为1小时
    @Override
    public void onCreate() {
        super.onCreate();
        initFloatView();
        addFloatViewToWindow();
    }
    private void initFloatView() {
        // 加载悬浮窗布局
        LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        floatView = inflater.inflate(R.layout.record_screen_time_float, null);
        recordTime = floatView.findViewById(R.id.record_time);
        // 设置初始时间
        updateRecordTime();
    }
    private void addFloatViewToWindow() {
        // 创建窗口参数
        WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
        layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
        layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
        layoutParams.format = PixelFormat.TRANSLUCENT;
        layoutParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
        layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
        layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
        layoutParams.x = 0;
        layoutParams.y = 0;
        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        windowManager.addView(floatView, layoutParams);
    }
    private void updateRecordTime() {
        long minutes = TimeUnit.MILLISECONDS.toMinutes(totalTimeInMilliseconds);
        long seconds = TimeUnit.MILLISECONDS.toSeconds(totalTimeInMilliseconds) TimeUnit.MINUTES.toSeconds(minutes);
        recordTime.setText(String.format("%02d:%02d", minutes, seconds));
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        // 启动计时器
        countDownTimer = new CountDownTimer(totalTimeInMilliseconds, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                totalTimeInMilliseconds = millisUntilFinished;
                updateRecordTime();
            }
            @Override
            public void onFinish() {
                countDownTimer.cancel();
                // 停止计时后的操作,例如移除悬浮窗等
            }
        }.start();
        return START_STICKY;
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (countDownTimer != null) {
            countDownTimer.cancel();
        }
        if (windowManager != null && floatView != null) {
            windowManager.removeView(floatView);
        }
    }
}

三、权限配置与启动服务

要在Android设备上显示悬浮窗,需要在AndroidManifest.xml中添加相应的权限:

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

还需要声明服务:

<service android:name=".FloatWindowService"/>

启动服务的代码示例:

Intent serviceIntent = new Intent(this, FloatWindowService.class);
startService(serviceIntent);

四、常见问题与解答

问题1:如何在Android 12及以上版本显示悬浮窗?

答:从Android 12开始,系统默认禁用了在录屏时显示悬浮窗的功能,为了在录屏时显示悬浮窗,可以在应用中添加以下代码:

如何在Android桌面上实现悬浮窗显示录屏时间控制的效果?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    WindowManager.LayoutParams params = new WindowManager.LayoutParams();
    params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    params.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
    params.format = PixelFormat.TRANSLUCENT;
    windowManager.addView(floatView, params);
} else {
    WindowManager.LayoutParams params = new WindowManager.LayoutParams();
    params.type = WindowManager.LayoutParams.TYPE_PHONE_SHORTCUT;
    params.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
    params.format = PixelFormat.TRANSLUCENT;
    windowManager.addView(floatView, params);
}

此代码确保在不同版本的Android系统中都能正确显示悬浮窗。

问题2:如何在悬浮窗中动态更新时间?

答:在FloatWindowService中使用CountDownTimer动态更新时间,每次计时器触发时,调用updateRecordTime()方法更新TextView,具体实现如上文所述。

小伙伴们,上文介绍了“android桌面悬浮窗显示录屏时间控制效果”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/631443.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-11-07 13:35
Next 2024-11-07 13:37

相关推荐

  • 如何理解并实现分布式配置服务器的功能与优势?

    分布式配置服务器背景介绍在现代软件开发中,微服务架构已经成为主流,这种架构通过将单体应用拆分为多个独立的服务,每个服务都可以独立开发、部署和扩展,从而提高了系统的灵活性和可维护性,随着系统规模的扩大,管理这些服务的配置信息变得复杂且难以维护,为了解决这一问题,分布式配置服务器应运而生,基本概念分布式配置服务器是……

    2024-11-25
    04
  • 如何在ArcGIS JS中实现标记文字的功能?

    ArcGIS JS API 中的文字标记在使用 ArcGIS JavaScript API 开发地图应用时,文字标记是一种常见的功能,用于在地图上显示文本信息,本文将详细介绍如何在 ArcGIS JS API 中创建和自定义文字标记,1. 基本文字标记的创建我们需要了解如何创建一个基本的文字标记,以下是一个简单……

    网站运维 2024-11-29
    05
  • 如何在ArcGIS JS中实现点的连线功能?

    ArcGIS JS点连线一、ArcGIS JS简介ArcGIS JavaScript API(简称ArcGIS JS API)是Esri公司提供的一个强大的开发工具,用于创建基于Web的地理信息系统(GIS)应用程序,通过这个API,开发者可以在网页中嵌入地图,并实现各种交互功能,如绘制点、线、面等几何图形,以……

    2024-11-29
    07
  • ajax定时刷新页面_定时刷新token

    使用Ajax定时刷新页面,可以通过设置一个定时器,每隔一段时间发送请求获取新的token,然后更新页面上的token信息。

    2024-06-08
    090
  • 如何配置App服务器以实现高效运行?

    应用配置服务器概述在现代软件开发和运维过程中,配置管理是一个至关重要的环节,应用配置服务器是用于集中管理和分发软件配置信息的工具或平台,它可以帮助开发者和运维人员有效地控制和更新应用程序的运行环境、参数和其他关键设置,而无需直接修改代码或手动干预每一个部署实例,为什么需要配置服务器?1、集中管理:通过一个中心化……

    2024-11-30
    03

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入