【问题标题】:Android mobile data on/off listenerAndroid 移动数据开/关监听器
【发布时间】:2016-03-20 18:59:03
【问题描述】:

我想知道是否有办法知道用户何时启用或禁用手机的移动数据。我不想查看我的手机当前是否通过移动网络连接。我正在尝试确定用户何时启用/禁用移动网络上的数据访问,即使当时 wifi 已连接。

我们的想法是能够知道用户离开家后是否没有数据。

我尝试过这样的广播:

    <receiver android:name=".MyReceiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>

它有效。但问题是,如果用户在连接到 Wifi 时禁用或启用数据,则不会发生任何事件,因此离开家将导致设备断开连接。

我需要知道这一点,因为我想提醒父母孩子离开了家。如果设备连接到互联网,我只能这样做。因此,如果 wifi 丢失,我无法告诉家长。这个想法是在有 wifi 的情况下,在离开家之前告诉家长移动数据已关闭。

【问题讨论】:

    标签: android broadcastreceiver listener


    【解决方案1】:

    这可以通过反射来完成,这里回答 How to tell if 'Mobile Network Data' is enabled or disabled (even when connected by WiFi)?

    它会告诉你移动数据是启用还是禁用。

    正如那里所说,它可能不适用于 Lollipop+

    在此处查看 Lollipop 测试方式: Android API call to determine user setting "Data Enabled"

    编辑: 实现您正在寻找的一种方法是手动检查上述移动数据的状态,例如定期检查。每分钟或 10 秒(如果您想提高效率)。

    编辑 2: 您也可以按照此处Listener for enable/disable mobile data (not connected or disconnnected) 的描述尝试 ContentObserver,以获得类似于“BroadcastReceiver”的方法。

    【讨论】:

    • 谢谢,但这不是我想要的。如果我要求,这将告诉我数据是否已启用。但我需要知道用户是否点击了数据开/关小部件。我的意思是,我需要一个广播接收器
    • 请检查我的编辑,看看我的方法是否可以帮助你实现你想要的。
    【解决方案2】:

    您可以在您的类中扩展广播接收器,然后在 onReceive 方法中:

        NetworkInfo networkInfo = conn.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        if(networkInfo!=null && networkInfo.isAvailable())
            //do something
    

    【讨论】:

    • 什么onReceive方法?如果 Wifi 已连接,我没有收到任何信息。
    • 您可以在扩展 BroadcastReceiver 的类中执行此操作,如果 if 的条件为真,您可以像这样调用您的侦听器 listener.isAvailable(true)
    • 但问题是,如果连接了wifi,你可以打开/关闭数据一百次,接收器不会有任何事件。
    猜你喜欢
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 2021-08-23
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多