我正在构建一个应用程序,当用户在其设备上启用或禁用移动数据使用时,我要在该应用程序上捕获。
我读到了关于使用android.net.conn.CONNECTIVITY_CHANGE来监控这些变化的文章,但随后我在这里遇到了各种各样的帖子和问题,这些帖子和问题表明这是wouldn'twork,大多数答案建议使用反射。
这让我相信,当用户更改我可以使用的移动数据的状态时,不会触发特定事件。
是否可以创建自定义事件来处理它?如果没有,您建议监控移动数据状态的最佳实践是什么?
提前谢谢

最佳答案

当用户更改启用移动数据的设置时,不会广播任何事件。要做到这一点(正如您所描述的,除了监听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

08-05 04:29