我有一个应用程序,我希望能够用于从远程查询获取连接状态报告.
我想知道WiFi是否已连接,以及是否通过移动网络启用了数据访问.
如果WiFi超出范围,我想知道我是否可以依赖移动网络.
问题是当我通过WiFi连接时,启用的数据总是返回为真,并且我只能在未通过WiFi连接时正确查询移动网络.
我看到的所有答案建议轮询以查看当前的连接是什么,但我想知道我是否需要移动网络,即使我目前可能通过WiFi连接.
无论如何判断移动网络数据是否在没有轮询的情况下启用以查看是否已连接?
编辑
因此,当通过WiFi连接时如果我转到设置并取消选择"数据已启用",然后在我的应用程序中执行此操作:
boolean mob_avail =
conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isAvailable();
Run Code Online (Sandbox Code Playgroud)
mob_avail返回为'true',但我已禁用移动网络数据,所以我希望它是'false'
如果我关闭WiFi,则(正确)没有连接,因为我已禁用移动网络数据.
那么当我通过WiFi连接时,如何检查移动网络数据是否已启用?
UPDATE
我按照ss1271的评论中的建议查看了getAllNetworkInfo()
我在以下3个条件下输出了有关移动网络的信息
WiFi关闭 - 移动数据
WiFi On - 移动数据关闭
WiFi On - 移动数据
并得到以下结果:
WiFi关闭:
mobile [HSUPA],state:CONNECTED/CONNECTED,reason:unknown,extra:internet,roaming:false,failover:false,isAvailable:true,featureId:-1,userDefault:false
WiFi On/Mobile OFF
NetworkInfo:type:mobile [HSUPA],state:DISCONNECTED/DISCONNECTED,reason:connectionDisabled,extra:(none),漫游:false,failover:false,isAvailable:true,featureId:-1,userDefault:false
WiFi On/Mobile On
NetworkInfo:type:mobile [HSPA],state:DISCONNECTED/DISCONNECTED,reason:connectionDisabled,extra:(none),漫游:false,failover:false,isAvailable:true,featureId:-1,userDefault:false
因此,您可以看到isAvailable每次都返回true,并且状态仅在WiFi处于影响状态时显示为Disconnected.
澄清
我不看,看看我的手机是目前移动网络连接.我AM试图建立用户是否已经启用了移动网络/禁用数据访问.他们可以通过转到设置 - >无线和网络设置 - >移动网络设置 - >数据启用来打开和关闭此功能
我有一个应用程序,只要手机连接到WiFi,它就会更新数据库.我实现了一个Service和BroadcastReceiver这将运行Service(它会告诉我是什么用网络),但问题是我不知道是什么的在添加manifest文件开始BroadcastReceiver当它连接到某种当网络状态发生变化或网络
我知道您可以编写代码,通过该代码可以确定设备是否连接到网络.
但在我的应用程序中,我想要做的是在设备将其状态从"网络"更改为"无网络"时收到通知.例如,当用户进入隧道并丢失信号等时会发生这种情况.或者当在WiFi上时,用户离开接入点的范围并且不再能够访问互联网.
Android API是否提供了可以注册监听器的功能,以便每次网络状态发生变化时都会收到通知?
我找到了这段代码并尝试使用它,但它没有做任何事情.网络状态发生变化时,我不会收到任何通知.
public class ConnectivityManager extends PhoneStateListener{
Activity activity;
public ConnectivityManager(Activity a){
TelephonyManager telephonyManager = (TelephonyManager)a.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(this, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
activity = a;
}
@Override
public void onDataConnectionStateChanged(int state) {
super.onDataConnectionStateChanged(state);
switch (state) {
case TelephonyManager.DATA_DISCONNECTED:
new AlertDialog.Builder(activity).
setCancelable(false).
setTitle("Connection Manager").
setMessage("There is no network connection. Please connect to internet and start again.").
setNeutralButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
System.exit(0);
}
}).create();
break;
case TelephonyManager.DATA_CONNECTED:
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
另外,我在AndroidManifest.xml中添加了相应的权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> …Run Code Online (Sandbox Code Playgroud) 我的程序试图检测移动网络是否在某个位置可用.
问题是,当我没有数据连接时,并不意味着网络不存在......这取决于用户的偏好.有可用的API NetworkInfo.isAvailable(),用于用户设置,例如用户是否正在漫游和漫游,或者AirplaneMode是否已打开.
我的问题是我无法弄清楚用户是否在Settings/WirelessNetworks/MobileNetworks下禁用了数据服务.
听起来像一个微不足道的问题,但我没有找到API调用.