如何在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

相关推荐

发表回复

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

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