Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测Android中何时关闭漫游_Android_Broadcastreceiver_Roaming - Fatal编程技术网

检测Android中何时关闭漫游

检测Android中何时关闭漫游,android,broadcastreceiver,roaming,Android,Broadcastreceiver,Roaming,我创建了一个BroadcastReceiver,用于侦听CONNECTIVITY\u CHANGE事件。现在,我只需打印调用BroadcastReceiver及其附加程序的Intent操作。我在马尼拉的办公室使用一部测试电话,SIM卡来自丹麦。调用onReceive()时,将在LogCat中打印出以下内容: action: android.net.conn.CONNECTIVITY_CHANGE key: extraInfo, value: data.tre.dk key: htcCurrent

我创建了一个
BroadcastReceiver
,用于侦听
CONNECTIVITY\u CHANGE
事件。现在,我只需打印调用
BroadcastReceiver
及其附加程序的
Intent
操作。我在马尼拉的办公室使用一部测试电话,SIM卡来自丹麦。调用
onReceive()
时,将在LogCat中打印出以下内容:

action: android.net.conn.CONNECTIVITY_CHANGE
key: extraInfo, value: data.tre.dk
key: htcCurrentActiveNetwork, value: null
key: networkInfo, value: null
key: reason, value: roamingOn
key: noConnectivity, value: null
key: inetCondition, value: null
我需要知道当漫游停止时,
reason
的价值是什么——猜测可能是
roamingOff
,但我不能确定,除非我去丹麦。这是因为我需要在漫游服务关闭时执行一项任务,我从LogCat中注意到,
CONNECTIVITY\u CHANGE
事件是由于切换漫游模式以外的原因触发的。或者有没有更好的方法来检测何时关闭漫游

广播接收器的代码:

舱单条目:


您可以简单地使用这一行来检测漫游状态:

Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING)
这不需要任何特殊权限或接收者


网络漫游和数据漫游是有区别的

一般来说,网络漫游允许您的电信公司在您出国时通过第三方卫星,这样您就可以与他们的服务保持连接。即使您已经告诉您的电信公司您想订阅网络漫游,它也不会被激活,直到您真正开始通过第三方电信卫星连接,而这只会在您实际出国时发生

数据漫游只是允许/禁止您的设备在网络漫游模式下使用移动数据。它更依赖于设备,您可以在手机的设置应用程序中轻松地打开或关闭它

简而言之,如果要检测网络漫游,请使用
TelephonyManager.isNetworkRoaming()
。如果要检查是否打开或关闭数据漫游,请使用
Settings.Secure.getInt(getContentResolver(),Settings.Secure.data\u roaming)

重要提示:我尚未亲自测试以下场景,我不确定
isNetworkRoaming()
将返回什么值

  • 您没有告诉您的家庭电信公司打开网络漫游,但当您到达其他国家时,手机开始检测其他电信公司网络
  • 在场景1之后,您的手机会要求您选择要连接的检测到的电信网络。您选择一个,手机将尝试连接。我不知道
    isNetworkRoaming()
    将在此处返回什么值,因为您最初没有订阅网络漫游

  • 我刚刚将该行的结果与
    TelephonyManager.isNetworkRoaming()
    的结果一起记录了下来。我发现
    Settings.Secure.DATA\u ROAMING
    可能返回
    0
    (意思是数据漫游已关闭),而
    isNetworkRoaming()
    true
    。我猜这是因为电信公司仍处于网络漫游模式,但我不允许我的设备使用移动互联网。它们似乎是不同的交换机,我想要的是网络漫游模式。你想知道什么?我假设
    TelephonyManager.isNetworkRoaming()
    显示您处于漫游状态,设置显示您是否可以在漫游中使用internet我正在使用网络漫游模式,因为我正在尝试测量用户的下一个月账单,这不仅包括通过数据漫游发送/接收的移动数据量。确定,使用
    TelephonyManager.isNetworkRoaming()
    检测用户是否处于漫游状态。
    <receiver android:name=".listener.RoamingListener">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>
    
    Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING)