gpt4 book ai didi

android - 终止应用程序后未调用 BroadcastReceiver

转载 作者:搜寻专家 更新时间:2023-11-01 09:22:26 24 4
gpt4 key购买 nike

我制作了一个必须在后台运行的应用程序。该应用程序基本上注册来电并将时间戳发送到我的服务器。问题是应用程序在一段时间后被杀死时无法正常工作。我假设操作系统只是杀死了我的应用程序,但我不知道为什么。以下是我如何在 AndroidManifest.xml 文件中注册我的应用

    <receiver
android:enabled="true"
android:name=".receiver.CallReceiver">
<intent-filter android:priority="99">
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
<intent-filter android:priority="100">
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>

这是我的 CallReceiver

class CallReceiver: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
// a lot of logic to send request using retrofit to my server
}
}

所以问题是一段时间后(6-10 小时)应用程序不会向服务器发送任何信息。为什么?再次打开应用程序后,它又开始发送数据。

最佳答案

在 list 中静态注册我的 BroadcastReceiver (BR)、应用适当的 Intent 过滤器、使用 JobIntentService(并在 list 中注册)处理从我的 BR 调用的工作后,我仍然得到不一致的结果。

完成上面列出的所有操作后,您应该能够发送 ADB 命令来激活广播并处理服务中的工作,即使应用已关闭也是如此。这在某些时候对我有用,但并非总是如此。

This article描述了对 BR 的限制。 “从 Android 3.1 开始,如果用户从未启动过相应的应用程序,或者如果用户通过 Android 菜单明确停止了该应用程序,Android 系统将默认排除所有接收者接收 intents”(< strong>又名用户执行强制停止)

当我通过调试启动应用程序,然后在我的设备上将其关闭时(或者当我在我的 IDE 中结束调试 session 时),我的 ADB 命令从未激活我的 BR。但是,在我的调试 session 结束后,当我在我的设备上打开应用程序并将其滑动关闭时,我可以通过 ADB 命令激活我的 BR。

发生这种情况是因为当您调试应用程序,然后在设备上手动滑动关闭它时,Android 认为这是强制停止,因此我的 BR 无法激活,直到我在设备上重新打开应用程序而不进行调试。

在互联网上搜索了几个小时,但没能找到我的解决方案,所以我想我应该把它贴在这里,以防万一一些可怜的不幸的人遇到和我一样奇怪的功能。

快乐编码:)

关于android - 终止应用程序后未调用 BroadcastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53666321/

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