当屏幕关闭时,如何使用 ConnectivityManager.requestNetwork 避免“出现问题”错误?

问题描述

我有一个前台服务(扩展 androidx.core.app.JobIntentService),当推送通知进来时,它会将工作排入队列。它的工作是连接到物联网设备的 Wi-Fi AP 并下载视频文件。无论屏幕是开还是关,都应该这样做。

在其 onHandleWork 方法中,它调用 startForeground,获取 PARTIAL_WAKE_LOCK 和 WIFI_MODE_FULL WifiLock。一切正常。

对于 API

现在对于 API 29+,我使用 WifiNetworkSpecifier 为 ConnectivityManager.requestNetwork() 生成 NetworkRequest,如下所述:https://developer.android.com/guide/topics/connectivity/wifi-bootstrap。根据文档,它会检查我所有的盒子。当用户在应用程序中启动连接时,它工作正常。 Bypassing user approval 部分在用户按一次 Connect 后似乎像宣传的那样工作。但我有两个问题:

  1. 如果在屏幕关闭调用requestNetwork,即使它成功并且我获取网络并下载文件并释放网络,当屏幕重新打开时,用户会遇到出现错误消息“出现问题。应用程序已取消选择设备的请求。”它真的杀死了魔法。有谁知道如何解决这个问题?

  2. requestNetwork 总是会导致显示“设备与 App Name 一起使用”对话框,当用户不在物联网设备附近且没有连接时,这可能会造成干扰和混淆被制造。有没有一种正确的方法可以在不涉及用户的情况下知道我的设备的 AP 是否在范围内?

不确定是否值得一提,但我已经在授予 ACCESS_FINE_LOCATION 和 ACCESS_BACKGROUND_LOCATION 的情况下尝试了这些测试,但没有任何区别。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)