gpt4 book ai didi

android - 在通话期间显示交互式 float 布局

转载 作者:太空狗 更新时间:2023-10-29 15:11:06 27 4
gpt4 key购买 nike

背景

有一些不错的应用程序可以在用户打电话或接听电话时在顶部显示一些布局(例如“current caller id”)。

我需要创建一个能够在通话期间在顶部显示某些内容并使其具有交互性的应用。

问题

使用 broadcastReceiver 、前台服务和 SYSTEM_ALERT 权限,我已经成功地在通话期间在屏幕上显示了一些东西。

只要显示的内容是静态的,我就没有问题。

但是,我注意到当我尝试使显示的内容具有交互性时,我遇到了一些问题:

  1. 一切都是跳跃的,这不仅包括动画,还包括将可见性设置为可见/消失。当我需要使事物可拖动时,我不想去想它会如何工作。

  2. 不确定是否是这个原因,但使用 SlidingDrawer 会使整个宽度都属于 SlidingDrawer,您无法点击它。这意味着如果它的位置在底部,当有人给您打电话时,您无法触摸“接听”按钮。

问题

这些问题的原因是什么?

我怎样才能修复它们并能够正确显示内容?

其他应用如何正确处理它?<​​/p>


编辑:关于 SlidingDrawer ,似乎它的位置和大小以及内容区域存在严重错误,即使它没有向用户显示并且用户可以看透,也无法触摸。不过,我不知道为什么,也不知道如何解决它,我也不知道为什么与普通应用程序相比,事情变得如此跳跃(可能是因为过度绘制,但它真的很慢)。

也许这个问题应该更笼统:how to make a floating window like on AirCalc ,可以轻松移动,但仍然非常快。

对于拖动功能,我尝试获取我显示的 Root View (类型为 WindowManager.LayoutParams )的 layoutParams,更新它并再次设置它,但由于某种原因它没有做任何事情.想知道我做错了什么。

编辑:看来我应该使用 windowManager.updateViewLayout 来更新布局参数。使用this post , 我让它完全可以拖动。

最佳答案

好的,我已经得出了一些结论,首先回答我原来的问题:

  1. 这可能是因为过度绘制和我使用的 View 。我想尝试可以替代 slidingDrawer 的库,但每个库都有不同的问题。使用简单的 View 证明了这个想法在一般情况下是可行的。

    在可见性变化的情况下,它会跳动,因为使用当前的 WindowManager.LayoutParams 大小无法适应 View 的大小。

  2. slidingDrawaer 确实有问题,因为它使用了关闭或打开时的整个尺寸。

现在讨论剩下的问题:

  1. 无法拖动?而不是常规的 setLayoutParams ,使用 windowManager.updateViewLayout 。

  2. 无法触摸视野之外的东西?根据您的需要设置其最小尺寸。您还可以设置窗口标志,以便触摸事件通过。

  3. 想听电话事件吗?您可以使用 broadcastReceiver 来触发应用程序的显示,但我怀疑挂断电话可能会导致有时稍后收到 Intent 。我认为您可以使用 telephonyManager 并在那里监听事件,使用您在前台运行的服务(我创建它只是为了确保应用程序不会在中间关闭)。

如果其他人有任何问题,我可以提供帮助。

关于android - 在通话期间显示交互式 float 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com