我检查过这样的互联网连接:
public static boolean isInternetAvailable(Context ctx)
{
NetworkInfo info = ((ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info == null || !info.isConnected()) return false;
if (info.isRoaming())
{
return Preferences.getIsRoamingAllowed(ctx);
}
return true;
}
到目前为止,它一直适用于所有安装。今天用户进来了一个电话,一切正常(浏览器,电子邮件等),它没有漫游。但是由于这次检查我的应用程序给出了“无连接”错误。
手机是HTC Droid ERIS 2.1
有人看过这个问题吗?任何指针为什么?
答案 0 :(得分:1)
好的我已经写了一个测试应用程序来获取活动网络和所有网络并让我看看发生了什么,我即将出去测试这个,因为我看到从一个网络切换到另一个网络时发生的异常(就像你走出wifi范围,进入cdma等)
除非您首先可以更改info.isConnected到以下
,否则可能会有所帮助if (info == null || !info.isConnectedOrConnecting()) return false;
这使得它更加健壮,因为如果你正处于切换过程中,你仍然让用户登录
第二件事是你说你的应用程序在漫游时拒绝登录,因为你的应用程序允许漫游偏好设置为false
return Preferences.getIsRoamingAllowed(ctx);
我认为您需要首先遵循不同的模式(仅我的意见),因为如果用户不允许通过其设置漫游(手机而不是您的应用)并且他们在漫游网络上,那么.getActiveNetwork()将返回null ,或者没有连接或不可用(在这种情况下.getReason返回“noroaming”)
就我个人而言,我会让电话决定,但如果你需要限制它,那么他会遵循的模式
将默认值设置为true,但请注意,这是您的活动第一次启动且用户没有机会设置任何内容(因为没有设置pref,这应该很容易检测)检测您的网络连接,如果你有一个然后还要注意他们是否在漫游
使用警告对话框提示他们,警告他们当前正在漫游并询问他们是否要立即登录或等到以后
OR
正常登录,如果他们没有漫游
但在任何一种情况下都可以让他们第一次设置“漫游”选项,而不是让他们自己解决。
这可以解决你的问题,并节省一些电话,无论如何这是一个设计决定,但我认为它比你现在的模式更适合你。
此外,我认为不是只是告诉他们没有连接,你可能想告诉他们为什么,返回枚举而不是布尔值,然后格式依赖于它。
最后我要在最后的答案之前再测试一下,因为我看到网络状态有些奇怪,但想在给你结果之前确认我的发现,我也需要这个,所以这是一个好时机我要深入研究这个。