我有一个Activity在其onCreate方法中查找来自Web的数据。该活动由用户触发通知激活。所以这是一个常见的问题,用户会很快打开手机,解锁它,滑动打开通知,点击通知,并且活动将在手机完成连接到互联网之前激活。Android:活动建立网络连接
我确实有一个友好的AlertDialog弹出,告知用户数据无法接收,并在网络连接时再试一次;但是否有一种方式让Activity主动告诉手机连接并检测到正在建立连接,然后等待连接建立,然后成功加载其数据?
我有一个Activity在其onCreate方法中查找来自Web的数据。该活动由用户触发通知激活。所以这是一个常见的问题,用户会很快打开手机,解锁它,滑动打开通知,点击通知,并且活动将在手机完成连接到互联网之前激活。Android:活动建立网络连接
我确实有一个友好的AlertDialog弹出,告知用户数据无法接收,并在网络连接时再试一次;但是否有一种方式让Activity主动告诉手机连接并检测到正在建立连接,然后等待连接建立,然后成功加载其数据?
通常情况下,你会做这样的事情:
@Override
public void onResume(){
super.onResume();
// first, check connectivity
if (isOnline){
// do things if it there's network connection
}else{
// as it seems there's no Internet connection
// ask the user to activate it
new AlertDialog.Builder(YourActivity.this)
.setTitle("Connection failed")
.setMessage("This application requires network access. Please, enable " +
"mobile network or Wi-Fi.")
.setPositiveButton("Accept", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// THIS IS WHAT YOU ARE DOING, Jul
YourActivity.this.startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
YourActivity.this.finish();
}
})
.show();
}
}
的想法是让用户去配置一个网络连接。然后,如果用户确实要配置它,您将调用Settings.ACTION_WIRELESS_SETTINGS
意图。
此外,请注意isOnline
变量,它是一个布尔值,指示是否有网络连接。为了设置变量,你可以使用一个外部简单的类是这样的:
public class CheckConnectivity {
public static boolean isOnline(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm == null)
return false;
NetworkInfo info = cm.getActiveNetworkInfo();
if(info == null)
return false;
return info.isConnectedOrConnecting();
}
}
此外,您将有此权限添加到您的AndroidManifest.xml
文件:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
由克里斯蒂安最后这句话 'return info.isConnectedOrConnecting();'看来你可以根据方法返回的布尔值来做任何你想做的事情。 既然你以后是一个正面的回报值,你可以使用它的变量来回调你的活动的下一个动作
这可能会令人困惑,但是,对于已经启用了wifi和3G的用户,它只是简单的情况下,互联网不是可用。在我的示例中,我的手机已启用了其无线电广播,但我在WPA2握手结束之前开始了我的活动。我很快就重新开始了我的活动,因为wifi链接已建立,所以它没有问题;但我希望能够检测到wifi链接实际上正在尝试连接,并等待它连接。 – Ricket 2010-07-24 17:34:57