我的应用程序中有一项要求,即我的应用程序应始终连接到互联网(仅限2G / 3G)。为此,我们可以创建一项服务,不断检查设备是否连接到互联网。如果不,那么我们可以通过编程方式连接到互联网(这是因为我的应用程序将在一个用户交互少的环境中工作,因此大多数事情应该自动发生)。 “服务”方法很好但由于不断轮询而消耗大量电池,我想避免这种情况。
我最近读到了一个名为 - CONNECTIVITY_ACTION
的广播,系统生成该广播。根据文档对设备连接的更改可能非常频繁 - 每次在移动数据之间移动时都会触发此广播和Wi-Fi。。
根据我的要求,该设备只能连接到2G / 3G,而且永远不会连接到wifi。因为系统有一个广播,我可以通过它来了解连接的变化(ON / OFF)到2G /仅3G?因为根据上面的引用,我推断的只有在状态从移动数据(2g / 3g)变为wifi时才会触发CONNECTIVITY_ACTION。是这样吗?(如果我错了,请纠正我。)
另外,请用最有效的方法告诉我,我应该用它来检查我的设备是否经常连接到互联网(2g / 3g)(除了基于服务的方法),这样我就可以采取行动了自动连接到互联网?提前谢谢!
答案 0 :(得分:1)
完全断开连接时会发送上述广播。它甚至在文档中提到
对于断开连接事件,如果根本没有连接的网络,则布尔额外的EXTRA_NO_CONNECTIVITY设置为true。
只需听取CONNECTIVITY_ACTION
并执行重新连接设备所需的一切。
完整文档:https://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION
答案 1 :(得分:1)
“服务”方法很好,但由于不断轮询而耗费大量电池,我想避免这种情况。
不,服务方法没有。事实上,您需要让您的侦听器在服务中在后端执行所有这些操作。
wifi和数据的连接侦听器是唯一的方法。如果你不使用wifi,测试将是一场噩梦(想象一下在2g网络上进行测试)。您需要在高速公路和不良网络情况下测试数据监听器。听众表现不好,有时发送多个事件,有时根本没有发生任何事件。因此,在使用数据进行测试之前,请尝试使用wifi。由于有了数据,您需要离开办公室并在真实的道路和地下,升降机和特殊模式(如AIRPLANE模式)中进行测试。仔细想想这个功能值得努力吗?有太多场景(现实世界)可能会失败。影响是巨大的,如果它行为不当,功能和你的连接服务器可以获得太多的连接请求将它发送到DOS攻击:)。
仔细考虑自动连接。
当我遇到这种情况时,我在需要时将UX / UI更改为连接,为应用程序的性能增加了2秒。
编辑:测试噩梦
是的,编码是问题的一部分,测试可能是一场噩梦。想象一下,仅在这个连接问题上每周收到10个错误。想象一下服务器上的DOS攻击,直到你重现它才会知道。服务器DONT记录套接字连接(带时间戳)。想象一下整整3天的努力来修复由你自己的应用程序引起的DOS攻击来自一个在电梯里的客户。 :)我最近遇到了这个狗屎。由于对框架的定制不佳,三星已经无法在Android中做些事情。