一周前,一周来我一直在尝试一个完全独立的应用程序来检测通话状态。我在吃棒棒糖5.1,所以我不能用 PRECISE_CALL_STATE
存在于棉花糖上面。我被限制在通常的通话状态,关机和空闲。
在google的帮助下,我进行了广泛的研究(这里的大部分是stackoverflow),这让我意识到,如果没有lollipop或更低版本上的这3个,或者没有新的android版本上的系统权限,可能就没有其他检测呼叫状态的方法了。所有固件上都有非常精确的呼叫状态。但是从这里的一个线程来看,它们似乎只能由当前的手机应用程序使用(我不会替换它,它仍然是普通的手机应用程序)。所以在这种情况下,似乎没有办法使用这些状态。
我也写了这个问题,并立即回答它,因为我能够使一些工作,只是对我的应用程序,我正在做的罚款。如果它是一个手机应用程序,那么它必须更加精确。但就我而言,我一点也不介意。
当我看到这么多关于这个问题的问题时,我决定把所有的问题都放在同一个问题里,用我努力做的事情来回答,对我来说已经足够好了,对其他人来说也是如此。请随时提出改进建议和/或发布其他解决方案!
如果我在提问和回答上有任何错误,请纠正我。我以前从没这么做过。
1条答案
按热度按时间soat7uwm1#
考虑到我写的问题,我被迫使用这3种状态,或者使用调用历史记录。由于我希望应用程序尽可能独立,我试图让应用程序检测到
PRECISE_CALL_STATE
从它自己开始。除非电话太多。如果它们是3个或更多,我必须从调用历史记录中获取一些调用的状态(如果有3个调用,则有一个情况除外,代码中对此进行了解释)。很遗憾,我就是没法检测到有人在等电话。到目前为止,我可以发现以下情况:
来电;
来电等待;
去话呼叫;
电话刚刚丢失;
前段时间打丢了电话;
刚接电话;
刚才接的电话;
通话刚刚结束;
电话一段时间前就结束了。
这是我为实现这一点而编写的代码。顺便说一下,因为这已经有一些行了,而且我发现stack exchange网络网站有一个自动许可证,然后将这个添加到它(正如我在个人资料中所说的),这样任何人都可以用它做任何他们想做的事,包括复制粘贴(可能需要时间来理解,也可能不需要时间来理解,因为当我第一次这样做时没有任何评论,我很难理解我做了什么
这项工作标记为cc0 1.0通用。要查看此许可证的副本,请访问https://creativecommons.org/publicdomain/zero/1.0
希望这是大到足以担心许可证问题。一周前我看到了这个,我开始思考什么时候在我发布的代码上添加cc0的许可通知。如果这里没有必要,请告诉我,以便我下次改进“检测”。
当电话状态更改时,我从telephonymanager.listen()方法内部调用此函数。我在一个类的构造函数中有一个方法,这个类示例化在一个永不停止的服务上,它是整个应用程序的主服务。基本上,这个对象总是在内存中。阅读那里的方法描述,知道如何处理它。希望我解释得很得体。如果我没有,请告诉我我能更好地解释什么。
如果有人有更好的解决方案,请随时分享!我会很感激的!一个比这个更好的方法,我看到的是在每一个电话状态的变化,去看看有没有变化,在通话记录,这取决于它的变化。但那会占用我更多的时间,我没有足够的时间。一个星期已经太多了,因为我不得不借我妈妈,爸爸和哥哥的电话,有时还得借家里的电话才能拿到这个哈哈哈。他们不是一直在家。
我将在这里留下github链接,了解完整理解代码所需的其他内容。例如,我在这里谈到了第x和y号案件。在这里:https://github.com/dadi590/detect-better-call-states-on-android,以及我曾经有过但没有工作的想法,或者我曾经有过但由于缺乏时间而无法实施的想法。