2011-07-14 30 views
1

我检查网络连接性是这样的:Android - 我的应用程序没有连接。如何调试?

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; 
    } 

它已经对所有安装工作好为止。今天用户进来了一切电话的工作(浏览器,电子邮件等),它不是漫游。但是由于这个检查我的应用程序给了“无连接”错误。

电话是2.1

任何宏达电Droid ERIS看到这个问题?任何指针为什么?

+0

如果你想给我一个调试apk与Log输出,我有一个用于测试的2.1版的Droid Eris。你是否也在说,你知道它正在漫游返回如果/然后呢? – Idistic

+0

这是一个问题。我不知道漫游时它会返回什么。而在我的偏好设置中,我将它设置为无默认漫游。所以这就像是22号。他没有登录来改变设置,他无法登录。但手机本身并未显示他正在漫游。你可以从市场com.idatt下载我的应用程序 - 调试应该在那里。只要尝试任何UN/PW - 如果您没有连接 - 它甚至不会尝试连接 – katit

+0

Wifi和蓝牙连接的状态是什么?我想你已经检查过了。 –

回答

1

好的我写了一个测试应用程序,它可以获取主动网络和所有网络,并让我看到发生了什么,因为我看到从一个网络切换到另一个网络时发生的异常情况(在你外出时的WiFi范围,进入CDMA等)

的东西,可以帮助无论第一你可以改变info.isConnected以下

if (info == null || !info.isConnectedOrConnecting()) return false; 

这使得它多了几分稳健夫妇因为如果你正在切换中间,你仍然让用户登录

第二件事是,你说,你的应用程序被拒绝登录,如果漫游,因为您的应用程序允许漫游偏好设置为false

return Preferences.getIsRoamingAllowed(ctx); 

我认为你需要遵循不同的模式(只是我的意见),首先是因为如果用户已经通过他们的设置禁止漫游(手机不是你的应用)并且他们在漫游网络上,​​那么.getActiveNetwork()将返回null,或者没有连接或不可用(在这种情况下,.getReason返回“noroaming”)

个人我会让手机决定,但如果你需要限制它,那么他的模式我会遵循将是

将默认值设置为true,但请注意,这是您的活动首次启动并且用户没有机会设置任何内容(因为没有设置前缀,所以应该很容易检测)检测您的网络连接,如果你有一个那么还指出,如果他们漫游

与警报对话框,警告他们,他们目前正在漫游提示他们,问他们是否想现在登录或等到以后

OR

正常登录,如果他们不漫游

但无论哪种情况,都要让他们能够第一次设置“漫游”选项,而不是让他们自己弄清楚。

这将解决你的catch 22的情况,并为你节省一些电话,无论如何这是一个设计决定,但我认为它会比你现在的模式更适合你。

此外,我认为,而不是告诉他们没有连接,你可能想告诉他们为什么,返回一个枚举而不是一个布尔值,然后格式依赖于它。

最后,我会在我的最终答案之前再测试一次,因为我在网络状态中看到一些奇怪的东西,但想在给出结果之前确认我的发现,我也需要这个,所以这是一个好时机对我来说这个。

+0

伟大的信息!你说什么关于偏好 - 点。我不确定我在想什么。事实上,如果手机设置阻止漫游时我会得到NULL,那么我甚至不需要此选项。是的,用户最好通过电话来决定和设置。我将监测你对这款手机的了解。 – katit

相关问题