【问题标题】:Monitor when the user enables/disables mobile data监控用户何时启用/禁用移动数据
【发布时间】:2014-01-14 10:37:51
【问题描述】:

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

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

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

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

提前致谢

【问题讨论】:

    标签: android events


    【解决方案1】:

    当用户更改移动数据启用设置时,不会广播任何事件。这样做的唯一方法(除了侦听CONNECTIVITY_CHANGE 事件,如您所描述的)是定期检查移动数据启用设置的状态。但是,如果您过于频繁地执行此操作,只会耗尽电池电量。

    如果您要创建自己的自定义 ROM,您当然可以将代码添加到设置应用程序中,以便在启用/禁用移动数据时广播事件。


    EDIT 添加了一种在修改设置时获取通知的方法

    实际上,我已经找到了一种方法来做到这一点。每当更改移动数据设置时,您都会收到通知。不幸的是,这样做的唯一方法是在任何设置更改时注册通知。但是,这种情况不会经常发生,至少您不必经常轮询并耗尽电池电量。您要做的是在Secure 设置上注册ContentObserver,如下所示:

    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

    【讨论】:

    • 此代码在 Android 4.2 之前的设备上运行良好。在较新的设备上,它可以检测 GPS 开/关,但不能检测移动数据开/关。移动数据似乎不再在安全设置中。
    【解决方案2】:

    您可以通过从here 下载示例应用 NetworkUsage 找到您要查找的内容。

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 2018-10-10
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多