问题:
所以问题是我有一个应用程序,当连接WiFi(连接的SSID和其他信息)或断开连接(通过移动网络)时,它会向我们的后端发送请求.但是,随着Android 7/N及更高版本的更改,CONNECTIVITY_CHANGE和CONNECTIVITY_ACTION不再在后台运行.现在大多数情况下人们滥用这个广播,因此我完全理解为什么要做出改变.但是,我不知道如何在当前状态下解决这个问题.
现在我不是一个Android开发人员(这是一个Cordova插件),所以我指望你们!
预期行为: 即使应用程序被杀/在后台,每当WiFi切换连接时,应用程序都会被唤醒并发送请求.
当前行为: 应用程序仅在应用程序位于前台时发送请求.
到目前为止尝试过: 到目前为止,我已经移动隐藏的意图,从清单中侦听CONNECTIVITY_ACTION,并在应用程序的主要部分(插件)中手动注册它.这使得它只要应用程序在内存中就可以工作,但不能在冷启动或实际背景下工作
已经看过: 大多数答案谈论使用预定的工作来代替丢失的广播.我看到这是如何工作的,例如,重试下载或类似,但不适用于我的情况(但如果我错了请纠正我).以下是我已经看过的SO帖子:
当应用程序处于前台时,检测Android 7.0 Nougat上的连接更改
我们有一个今天的小部件,根据相应应用程序中的数据设置,最多显示6个按钮.此数据使用app-groups共享.如果至少配置了一个按钮,它将显示如上图所示.如果用户未登录,或者未配置任何按钮,则会显示如下图所示的消息.
在未打开应用程序几个小时(大约4到7之间)之后,窗口小部件将恢复为"未配置按钮"视图.
从app-group加载数据的方式是使用如下所示的代码完成的.(完整代码的要点)在我编写它的方式中,可以显示"无按钮配置"视图的唯一方法是buttons数组是否实际存在但长度为零.
我期望缓存清除或后台服务停止,但据我所知,应该更早地捕获异常:
userDefaults则应为nil,因此应显示"Not logged in in view".buttons则应为nil,因此应再次显示"未登录视图"考虑到应用程序在后台不执行任何操作,应用程序本身无法更改按钮.
我尝试连接调试器时再现这个,但问题不会重现.
有没有人对如何解决这个问题或如何开始调试这一点有任何想法?
相关文件:
相关代码:
private struct sharedData {
static var baseUrl: String?
static var token: String?
static var phoneDeviceId: String?
static var buttons: Array<Button>?
}
func loadData() {
let groupIdentifier = "group." + NSBundle.mainBundle().bundleIdentifier!
var groupIdArray = groupIdentifier.componentsSeparatedByString(".")
groupIdArray.removeAtIndex(groupIdArray.count - 1)
let appGroupIdentifier = groupIdArray.joinWithSeparator(".");
let userDefaults = NSUserDefaults.init(suiteName: appGroupIdentifier)
if (userDefaults == nil) {
print("Error …Run Code Online (Sandbox Code Playgroud) 我有以下列方式格式化的数据:
DataRDD = [(String, List[String])]
Run Code Online (Sandbox Code Playgroud)
第一个字符串表示键,列表包含值.请注意,每个键的值数量不同(但绝不为零).我希望以这样一种方式映射RDD,即列表中的每个元素都有一个键值对.为了澄清这一点,想象整个RDD如下:
DataRDD = [(1, [a, b, c]),
(2, [d, e]),
(3, [a, e, f])]
Run Code Online (Sandbox Code Playgroud)
然后我希望结果如下:
DataKV = [(1, a),
(1, b),
(1, c),
(2, d),
(2, e),
(3, a),
(3, e),
(3, f)]
Run Code Online (Sandbox Code Playgroud)
因此,我想返回具有相同值的所有键组合.即使没有相同的值,也可以将其返回到每个键的列表中:
DataID = [(1, [3]),
(2, [3]),
(3, [1, 2])]
Run Code Online (Sandbox Code Playgroud)
由于我是Spark和Scala的新手,我还没有完全掌握他们的概念,因此我希望你们中的任何人都可以帮助我.即使它只是其中的一部分.