我正在构建一个应用,当用户启用或禁用其设备上的移动数据使用时,我想要捕获该应用。
我读过有关使用android.net.conn.CONNECTIVITY_CHANGE
来监控此类更改的信息,但后来我在这里发现了各种帖子和问题,说wouldn't work,并且大多数答案都提到了用反射。
这让我相信,当用户更改我可以使用的移动数据状态时,不会触发特定事件。
是否可以创建自定义事件来处理它?如果没有,您建议最佳做法是监控移动数据的状态?
提前致谢
答案 0 :(得分:3)
当用户更改启用移动数据的设置时,不会播放任何事件。关于执行此操作的唯一方法(除了监听CONNECTIVITY_CHANGE
事件之外,正如您所描述的那样)将定期检查启用移动数据的设置的状态。但是,如果你经常这样做,你就会耗尽电池。
如果您要创建自己的自定义ROM,您当然可以在设置应用中添加代码,以便在启用/禁用移动数据时广播事件。
编辑添加了一种在修改设置时获取通知的方法
实际上,我找到了一种方法。每当移动数据设置发生变化时,您都可以收到通知。不幸的是,唯一的方法是在任何设置更改时注册通知。然而,这种情况并非经常发生,至少你不必经常轮询并耗尽电池。您要做的是在ContentObserver
设置上注册Secure
,如下所示:
contentObserver = new SettingsObserver();
getApplicationContext().getContentResolver().registerContentObserver(
Settings.Secure.CONTENT_URI, true, contentObserver);
您应该像这样实施SettingsObserver
:
public class SettingsObserver extends ContentObserver {
public SettingsObserver() {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
// Here you want to check the state of mobileDataEnabled using reflection to
// see if it has changed - see https://stackoverflow.com/a/12864897/769265
}
}
有关如何确定移动数据设置的当前状态的详细信息,请参阅https://stackoverflow.com/a/12864897/769265。
答案 1 :(得分:0)
嘿,您可以从here示例应用NetworkUsage下载,找到您要查找的内容。