2010-07-24 93 views
3

我有一个Activity在其onCreate方法中查找来自Web的数据。该活动由用户触发通知激活。所以这是一个常见的问题,用户会很快打开手机,解锁它,滑动打开通知,点击通知,并且活动将在手机完成连接到互联网之前激活。Android:活动建立网络连接

我确实有一个友好的AlertDialog弹出,告知用户数​​据无法接收,并在网络连接时再试一次;但是否有一种方式让Activity主动告诉手机连接并检测到正在建立连接,然后等待连接建立,然后成功加载其数据

回答

4

通常情况下,你会做这样的事情:

@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" /> 
+2

这可能会令人困惑,但是,对于已经启用了wifi和3G的用户,它只是简单的情况下,互联网不是可用。在我的示例中,我的手机已启用了其无线电广播,但我在WPA2握手结束之前开始了我的活动。我很快就重新开始了我的活动,因为wifi链接已建立,所以它没有问题;但我希望能够检测到wifi链接实际上正在尝试连接,并等待它连接。 – Ricket 2010-07-24 17:34:57

2

由克里斯蒂安最后这句话 'return info.isConnectedOrConnecting();'看来你可以根据方法返回的布尔值来做任何你想做的事情。 既然你以后是一个正面的回报值,你可以使用它的变量来回调你的活动的下一个动作