2011-12-30 122 views
16

我有一个小程序,试图连接到一个wifi网络。 它启用设备上的wifi,然后如果它是第一次连接到某个网络,它会加载设备wifi以选择并添加连接密码。 直到我添加密码才能连接程序不应该完成。 如何添加一些东西,等到我从连接的WiFi管理器中获取? 我尝试睡眠,但它冻结了应用程序,并没有得到WiFi弹出菜单连接? 还有其他方法吗?等到wifi连接到android

回答

24

我在一个月前为您的问题找到了解决方案,只需使用Thread put方法isConnected()即可。
在这种情况下,我使用WifiExplorerActivity来显示所有WiFi网络并允许用户连接到它。

 Thread t = new Thread() { 
     @Override 
     public void run() { 
      try { 
        //check if connected! 
       while (!isConnected(WifiExplorerActivity.this)) { 
        //Wait to connect 
        Thread.sleep(1000);      
       } 

       Intent i = new Intent(WifiExplorerActivity.this, MainActivity.class); 
       startActivity(i); 

      } catch (Exception e) { 
      } 
     } 
    }; 
    t.start(); 

这是功能检查的WiFi已连接与否:

public static boolean isConnected(Context context) { 
    ConnectivityManager connectivityManager = (ConnectivityManager) 
     context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = null; 
    if (connectivityManager != null) { 
     networkInfo = connectivityManager.getActiveNetworkInfo(); 
    } 

    return networkInfo != null && networkInfo.getState() == NetworkInfo.State.CONNECTED; 
} 

最后,确保你的AndroidManifest.xml是这样的:

<activity android:name=".WifiExplorerActivity" >   
    <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     </intent-filter> 
</activity> 

此外,您还可以使用ProgressDialog等待连接。见http://developer.android.com/guide/topics/ui/dialogs.html

+0

非常感谢。我使用它,它工作得很好 – prokopis 2012-01-01 17:01:04

+1

为什么你需要清单中的? (我从来没有使用它,我不明白它是什么) – MiniGod 2012-06-06 17:26:51

+1

我使用android.net.conn.CONNECTIVITY_CHANGE为此活动注册Receiver,请参阅http://stackoverflow.com/questions/8127324/connectivitymanager-android -net-conn-connectivity-change – R4j 2012-06-07 02:14:51