在通话期间显示交互式浮动布局

时间:2013-04-29 07:47:20

标签: android phone-call stayontop

背景

有一些不错的应用程序在顶部显示一些布局,而用户正在打电话或回答一个(例如“current caller id”)。

我需要创建一个应用程序,能够在通话期间显示某些内容,并允许它进行交互。

问题

使用broadcastReceiver,前台服务和SYSTEM_ALERT权限,我在调用过程中成功地在屏幕上显示了一些内容。

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

但是,我注意到当我尝试将内容显示为交互式时,我遇到了一些问题:

  1. 一切都是跳跃的,这不仅包括动画,还包括设置可见/消失的可见性。我不愿意想想当它需要让事情变得可拖动时它会起作用。

  2. 不确定这是否是原因,但使用SlidingDrawer会使整个宽度属于SlidingDrawer而您无法点击它。这意味着,如果其位置位于底部,则当有人呼叫您时,您无法触摸“应答”按钮。

  3. 问题

    这些问题的原因是什么?

    如何修复它们并能够正确显示?

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


    编辑:关于SlidingDrawer,它似乎有关于它的位置和大小以及内容区域的可怕错误,即使它没有向用户显示并且用户可以看透,也无法触及。不过,我不知道为什么,以及如何修复它,而且我也不知道为什么事情比普通的应用程序更加突如其来(可能是因为过度绘图,但它真的很慢)。

    也许这个问题应该更加通用:如何制作像AirCalc一样的浮动窗口,可以轻松移动但仍然非常快。

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

    编辑:似乎我应该使用windowManager.updateViewLayout来更新layoutParams。使用this post,我已经完全拖延了。

1 个答案:

答案 0 :(得分:0)

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

  1. 这可能是因为透支和我用过的观点。我想尝试可以替换slidingDrawer的库,但每个库都有不同的问题。使用简单的视图证明了这个想法一般有用。

    在可见性更改的情况下,它是跳跃的,因为视图的大小无法使用当前的WindowManager.LayoutParams大小。

  2. slidingDrawaer确实存在问题,因为它使用了关闭或打开时获得的整个大小。

  3. 现在讨论其他问题:

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

    2. 无法触摸视图外?根据您的需要设置最小尺寸。你也可以设置窗口标志,以便触摸事件。

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

    4. 如果有其他人有疑问,我可以提供帮助。