监视用户启用/禁用移动数据的时间

时间:2013-12-26 19:53:01

标签: android events

我正在构建一个应用,当用户启用或禁用其设备上的移动数据使用时,我想要捕获该应用。

我读过有关使用android.net.conn.CONNECTIVITY_CHANGE来监控此类更改的信息,但后来我在这里发现了各种帖子和问题,说wouldn't work,并且大多数答案都提到了用反射。

这让我相信,当用户更改我可以使用的移动数据状态时,不会触发特定事件。

是否可以创建自定义事件来处理它?如果没有,您建议最佳做法是监控移动数据的状态?

提前致谢

2 个答案:

答案 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下载,找到您要查找的内容。