【问题标题】:How to detect when WIFI Connection has been established in Android?如何检测何时在 Android 中建立了 WIFI 连接?
【发布时间】:2011-08-18 19:29:28
【问题描述】:

我需要检测何时通过 WIFI 进行网络连接。发送什么广播以建立有效的网络连接。我需要验证 HTTP 的有效网络连接是否存在。我应该听什么以及需要进行哪些额外的测试才能知道存在有效的连接。

【问题讨论】:

  • 这个问题的部分答案在这里我发现:stackoverflow.com/questions/4238921/…
  • 但是还有什么时候检查这些条件的问题?
  • 我想反馈一下是否会有广播接收器可以捕获到的广播?
  • 如何在 Android O 上执行此操作,因为 android.net.wifi.STATE_CHANGE 等隐式广播接收器将不再允许在清单中注册(请参阅developer.android.com/guide/components/…)。如果我们在应用程序活动中注册它(比如 onCreate),那么它必须在 onStop() 中取消注册,我们将不再收到与 wifi 相关的事件

标签: android android-wifi


【解决方案1】:

您可以使用带过滤器的广播

 <receiver
        android:name=".receivers.ConnectionType"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
        </intent-filter>
    </receiver>

之后,就可以这样监听返回的值了

  @Override
public void onReceive(Context context, Intent intent) {

    int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
    if(wifiState==WifiManager.WIFI_STATE_ENABLED){
        Toast.makeText(context, "WIFI on", Toast.LENGTH_SHORT).show();

    }else if(wifiState==WifiManager.WIFI_STATE_DISABLED) {
        Toast.makeText(context, "WIFI OFF", Toast.LENGTH_SHORT).show();
    }


}

每次启用或禁用 WIFI 时都会触发

【讨论】:

    【解决方案2】:

    2020 年 11 月:

    我处理了太多被 Google 弃用的项目。最后我找到了一个解决我的特殊要求的解决方案,使用谷歌目前建议的“registerNetworkCallback”。

    我需要一种简单的方法来检测我的设备是否在 WIFI 中分配了 IPv4。 (其他的案例我没试过,我的要求很具体,但也许这个方法,没有弃用的元素,可以作为其他案例的基础)。

    在 API 23、24 和 26(物理设备)以及 API 28 和 29(模拟设备)上进行了测试。

        ConnectivityManager cm 
                = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkRequest.Builder builder = new NetworkRequest.Builder();
    
        cm.registerNetworkCallback
                (
                        builder.build(),
                        new ConnectivityManager.NetworkCallback()
                        {
                            @Override
                            public void onAvailable(Network network)
                            {
                                //Actions to take with Wifi available.
                            }
                            @Override
                            public void onLost(Network network)
                            {
                                //Actions to take with lost Wifi.
                            }
                        }
    
                );
    

    (在“MainActivity.Oncreate”内部实现)

    注意:在清单中需要“android.permission.ACCESS_NETWORK_STATE”

    【讨论】:

    • 我一直在使用已弃用的版本并注意到一个缺陷 - 我可以检测到 wifi 是否真的坏了,但如果 wifi 工作正常并且它所连接的路由器没有,则无法检测到。新的回调是否表明您是否可以真正与互联网通信?或者像以前一样只看到 SSID
    • @Martin 对不起。我仅使用此方法来检测设备是否具有分配的 IPv4(从“onAvailable”调用另一个函数)。我不检查是否有互联网。在我的项目中,互联网并不是特别要求。我确信必须有其他适当的方法来验证可能从“onAvailable”调用的互联网访问。
    • onLost()onUnavailable() 在没有互联网连接的情况下首次启动应用程序时不会被调用。有什么建议吗?
    • @SamChen 你是对的。如果应用启动时未建立 Wifi,则不会调用“onAvailable()”和“onLost()”函数。但如果应用程序以已建立的 Wifi 连接启动,则实际上会调用“onAvailable()”。因此,我将我的应用程序初始化为“未建立 Wifi”状态。如果实际上没有 Wifi,我的应用程序将保持在“未建立 Wifi”状态。但是,如果在启动我的应用程序时发现已建立 Wifi 连接,则会调用“onAvailable”函数并将我的应用程序更改为“Wifi 已建立”状态。
    • @cesargastonec 哇,你真是天才!使用Boolean 来指示连接状态并初始化为false,好主意。
    【解决方案3】:

    1) 我也尝试了广播接收器方法,尽管我知道 CONNECTIVITY_ACTION/CONNECTIVITY_CHANGE 在 API 28 中已被弃用且不推荐使用。也绑定使用显式注册,只要应用程序正在运行,它就会监听。

    2) 我还尝试了 Firebase Dispatcher,它可以工作,但不能超出应用被杀死的范围。

    3) 推荐的方法是 WorkManager,以保证在进程被杀死和内部使用 registerNetworkRequest() 之后执行

    支持#3 方法的最大证据是Android doc 本身。特别是对于后台应用程序。

    还有here

    在 Android 7.0 中,我们移除了三个常用的隐式广播——CONNECTIVITY_ACTION、ACTION_NEW_PICTURE 和 ACTION_NEW_VIDEO——因为它们会同时唤醒多个应用的​​后台进程,并消耗内存和电池。如果您的应用收到这些,请利用 Android 7.0 迁移到 JobScheduler 和相关 API。

    到目前为止,使用 Periodic WorkManager 请求对我们来说效果很好。

    更新:我最终写了 2 个系列 medium post 关于它。

    【讨论】:

      【解决方案4】:

      您可以注册BroadcastReceiver,以便在建立 WiFi 连接(或连接发生更改)时收到通知。

      注册BroadcastReceiver:

      IntentFilter intentFilter = new IntentFilter();
      intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
      registerReceiver(broadcastReceiver, intentFilter);
      

      然后在您的BroadcastReceiver 中执行以下操作:

      @Override
      public void onReceive(Context context, Intent intent) {
          final String action = intent.getAction();
          if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
              if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)) {
                  //do stuff
              } else {
                  // wifi connection was lost
              }
          }
      }
      

      有关详细信息,请参阅 BroadcastReceiverWifiManager 的文档

      当然,在此之前你应该检查设备是否已经连接到WiFi。

      编辑: 感谢ban-geoengineering,这里有一个方法可以检查设备是否已经连接:

      private boolean isConnectedViaWifi() {
           ConnectivityManager connectivityManager = (ConnectivityManager) appObj.getSystemService(Context.CONNECTIVITY_SERVICE);
           NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);     
           return mWifi.isConnected();
      }
      

      【讨论】:

      • 为什么是 SUPPLICANT_CONECTION_CHANGE_ACTION?我认为这只是 CONNECTION_CHANGE 更改广播。为什么要取代???谢谢
      • 嗯?我没有看到名为 connection_change 的操作...?我只看到 wifi 状态发生了变化,但该操作仅指示 wifi 是否启用(或启用/禁用)而不是它是否已连接...... supplicant_connection_change_action 没有做你需要的吗?
      • 对我来说 WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION 在建立/丢失与已知 wifi 站的连接时不起作用。但 WifiManager.NETWORK_STATE_CHANGED_ACTION 确实有效。
      • "android.net.wifi.STATE_CHANGE" 为我工作。在下面查看我的答案
      • "当然在此之前你应该检查设备是否已经连接到WiFi。" - 所以,要获取初始 Wi-Fi 状态,可以使用这种方法...private boolean isConnectedViaWifi() { ConnectivityManager connectivityManager = (ConnectivityManager) appObj.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return mWifi.isConnected(); }
      【解决方案5】:

      Android O 移除了接收 wifi 状态更改的隐式广播的可能性。因此,如果您的应用程序已关闭,您将无法接收它们。新的WorkManager 能够在您的应用关闭时运行,所以我对它进行了一些试验,它似乎运行良好:

      将此添加到您的依赖项中:

      implementation "android.arch.work:work-runtime:1.0.0-alpha08"
      

      WifiConnectWorker.kt

      class WifiConnectWorker : Worker() {
      
          override fun doWork(): Result {
              Log.i(TAG, "I think we connected to a wifi")
              return Result.SUCCESS
          }
      }
      

      MainActivity.kt

      class MainActivity : AppCompatActivity() {
      
          override fun onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
              setContentView(R.layout.main_activity)
      
              val workManager = WorkManager.getInstance()
      
              // Add constraint to start the worker when connecting to WiFi
              val request = OneTimeWorkRequest.Builder(WifiConnectWorker::class.java)
                  .setConstraints(Constraints.Builder()
                      .setRequiredNetworkType(UNMETERED)
                      .build())
                  .build()
      
              // The worker should be started, even if your app is closed
              workManager.beginUniqueWork("watch_wifi", REPLACE, request).enqueue()
          }
      }
      

      请注意,这只是对一次性通知的快速测试。要在打开和关闭 WiFi 时始终收到通知,还有更多工作要做。

      PS:当应用强制退出时,worker没有启动,看来WorkManager正在取消请求。

      【讨论】:

      • 即使我的应用程序处于强制退出状态,是否有任何方法可以启动工作程序。仅当应用程序打开时,工作管理器才使用 .setRequiredNetworkType(UNMETERED)。即使应用程序处于终止状态(强制关闭状态),是否有任何方法可以触发工作人员。因为隐式广播接收器也有所限制。什么是最好的选择?
      【解决方案6】:

      对于所有喜欢 CONNECTIVITY_CHANGE 广播的人,请注意,当应用在 Android O 中处于后台时,这将不再触发。

      https://developer.android.com/about/versions/o/background.html

      【讨论】:

        【解决方案7】:

        此代码根本不需要许可。它仅限于 Wi-Fi 网络连接状态更改(不考虑任何其他网络)。接收器静态发布在 AndroidManifest.xml 文件中,不需要导出,因为它会在每次网络连接状态更改时由系统protected broadcastNETWORK_STATE_CHANGED_ACTION 调用。

        AndroidManifest:

        <receiver
            android:name=".WifiReceiver"
            android:enabled="true"
            android:exported="false">
        
            <intent-filter>
                <!--protected-broadcast: Special broadcast that only the system can send-->
                <!--Corresponds to: android.net.wifi.WifiManager.NETWORK_STATE_CHANGED_ACTION-->
                <action android:name="android.net.wifi.STATE_CHANGE" />
            </intent-filter>
        
        </receiver>
        

        BroadcastReceiver 类:

        public class WifiReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
        /*
         Tested (I didn't test with the WPS "Wi-Fi Protected Setup" standard):
         In API15 (ICE_CREAM_SANDWICH) this method is called when the new Wi-Fi network state is:
         DISCONNECTED, OBTAINING_IPADDR, CONNECTED or SCANNING
        
         In API19 (KITKAT) this method is called when the new Wi-Fi network state is:
         DISCONNECTED (twice), OBTAINING_IPADDR, VERIFYING_POOR_LINK, CAPTIVE_PORTAL_CHECK
         or CONNECTED
        
         (Those states can be obtained as NetworkInfo.DetailedState objects by calling
         the NetworkInfo object method: "networkInfo.getDetailedState()")
        */
            /*
             * NetworkInfo object associated with the Wi-Fi network.
             * It won't be null when "android.net.wifi.STATE_CHANGE" action intent arrives.
             */
            NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
        
            if (networkInfo != null && networkInfo.isConnected()) {
                // TODO: Place the work here, like retrieving the access point's SSID
        
                /*
                 * WifiInfo object giving information about the access point we are connected to.
                 * It shouldn't be null when the new Wi-Fi network state is CONNECTED, but it got
                 * null sometimes when connecting to a "virtualized Wi-Fi router" in API15.
                 */
                WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
                String ssid = wifiInfo.getSSID();
            }
        }
        }
        

        权限:

        None
        

        【讨论】:

        • 在运行
        【解决方案8】:

        仅对我而言 WifiManager.NETWORK_STATE_CHANGED_ACTION 有效。

        注册一个广播接收器:

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        registerReceiver(broadcastReceiver, intentFilter);
        

        并接收:

        @Override
        public void onReceive(Context context, Intent intent) {
        
            final String action = intent.getAction();
        
            if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){
                NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
                boolean connected = info.isConnected();
        
                //call your method
            }      
        }
        

        【讨论】:

        • 对我来说也只有 WifiManager.NETWORK_STATE_CHANGED_ACTION 有效,有什么解释为什么只有这个有效吗?
        【解决方案9】:

        用户@JPM 和@usman 给出的答案非常有用。它工作正常,但在我的情况下,它在我的情况下多次出现在onReceive 4 次,所以我的代码执行多次。

        我根据我的要求做了一些修改和制作,现在它只来了 1 次

        这是用于广播的 java 类。

        public class WifiReceiver extends BroadcastReceiver {
        
        String TAG = getClass().getSimpleName();
        private Context mContext;
        
        @Override
        public void onReceive(Context context, Intent intent) {
        
            mContext = context;
        
        
            if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
        
                ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        
                if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI &&
                        networkInfo.isConnected()) {
                    // Wifi is connected
                    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                    String ssid = wifiInfo.getSSID();
        
                    Log.e(TAG, " -- Wifi connected --- " + " SSID " + ssid );
        
                }
            }
            else if (intent.getAction().equalsIgnoreCase(WifiManager.WIFI_STATE_CHANGED_ACTION))
            {
                int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
                if (wifiState == WifiManager.WIFI_STATE_DISABLED)
                {
                    Log.e(TAG, " ----- Wifi  Disconnected ----- ");
                }
        
            }
        }
        }
        

        在 AndroidManifest 中

        <receiver android:name=".util.WifiReceiver" android:enabled="true">
                <intent-filter>
                    <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
                </intent-filter>
            </receiver>
        
        
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        

        【讨论】:

        • 什么是wifiState?
        • 还想知道wifiState是什么,它是如何产生的
        • @behelit 现在“wifiState”在编辑后的答案中。
        【解决方案10】:

        最适合我的:

        AndroidManifest

        <receiver android:name="com.AEDesign.communication.WifiReceiver" >
           <intent-filter android:priority="100">
              <action android:name="android.net.wifi.STATE_CHANGE" />
           </intent-filter>
        </receiver>
        

        BroadcastReceiver 类

        public class WifiReceiver extends BroadcastReceiver {
        
           @Override
           public void onReceive(Context context, Intent intent) {
        
              NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
              if(info != null && info.isConnected()) {
                // Do your work. 
        
                // e.g. To check the Network Name or other info:
                WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                String ssid = wifiInfo.getSSID();
              }
           }
        }
        

        权限

        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        

        【讨论】:

        • 我认为这是专门针对 wifi state chage 的最佳答案。谢谢
        • 为了方便将来参考,硬编码的操作是WifiManager.NETWORK_STATE_CHANGED_ACTION
        • if (info != null && info.isConnected()) = no spaghetti.
        • 我们是否需要编写任何代码来在主活动中发送广播??
        • 如何在 Android O 上执行此操作,因为 android.net.wifi.STATE_CHANGE 等隐式广播接收器将不再允许在清单中注册(请参阅developer.android.com/guide/components/…)。如果我们在应用程序活动中注册它(比如 onCreate),那么它必须在 onStop() 中取消注册,我们将不再接收与 wifi 相关的事件。
        【解决方案11】:

        为了检测 WIFI 连接状态,我使用了 ConnectivityManager 类中的 CONNECTIVITY_ACTION,所以:

            IntentFilter filter=new IntentFilter();
            filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
            registerReceiver(receiver, filter);
        

        以及来自您的广播接收器:

            if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
                int networkType = intent.getIntExtra(
                        android.net.ConnectivityManager.EXTRA_NETWORK_TYPE, -1);
                if (ConnectivityManager.TYPE_WIFI == networkType) {
                    NetworkInfo networkInfo = (NetworkInfo) intent
                            .getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
                    if (networkInfo != null) {
                        if (networkInfo.isConnected()) {
        
                            // TODO: wifi is connected
                        } else {
                            // TODO: wifi is not connected
                        }
                    }
                }
        
            }
        

        ps:对我来说很好用:)

        【讨论】:

        • 仅供参考,在 Android 6 中,当您拥有有效的手机数据连接时,wifi 状态的变化不会触发 CONNECTIVITY_ACTION。他们这样做的唯一原因是连接状态受到了影响,但现在没有。
        • CONNECTIVITY_ACTION: "此常量在 API 级别 28 中已弃用。应用程序应使用更通用的 requestNetwork(NetworkRequest, PendingIntent)、registerNetworkCallback(NetworkRequest, PendingIntent) 或 registerDefaultNetworkCallback(ConnectivityManager.NetworkCallback) 函数来更快以及有关他们关心的网络变化的更详细更新。”
        【解决方案12】:

        我有两种方法来检测接收应用上下文的 WIFI 连接:

        1)我的旧方法

        public boolean isConnectedWifi1(Context context) {
            try {
                ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();           
                if (networkInfo != null) {
                    NetworkInfo[] netInfo = connectivityManager.getAllNetworkInfo();
                    for (NetworkInfo ni : netInfo) {
                        if ((ni.getTypeName().equalsIgnoreCase("WIFI"))
                                && ni.isConnected()) {
                            return true;
                        }                   
                    }
                }
                return false;
            } catch (Exception e) {
                Log.e(TAG, e.getMessage());
            }
            return false;
        }
        

        2)我的新方法(我目前正在使用这种方法):

        public boolean isConnectedWifi(Context context) {
                 ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                 NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);     
                 return networkInfo.isConnected();
        }
        

        【讨论】:

        • 我怎样才能在 Android O 上做到这一点,因为像 android.net.wifi.STATE_CHANGE 这样的隐式广播接收器将不再被允许在清单中注册(请参阅developer.android.com/guide/components/…)。如果我们在应用程序活动中注册它(比如 onCreate),那么它必须在 onStop() 中取消注册,我们将不再收到与 wifi 相关的事件
        【解决方案13】:

        我使用了这个代码:

        public class MainActivity extends Activity
            {
            .
            .
            .
            @Override
            protected void onCreate(Bundle savedInstanceState)
                {
                super.onCreate(savedInstanceState);
                .
                .
                .
                }
        
            @Override
            protected void onResume()
                {
                super.onResume();
                IntentFilter intentFilter = new IntentFilter();
                intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
                registerReceiver(broadcastReceiver, intentFilter);  
                }
        
            @Override
            protected void onPause()
                {
                super.onPause();
                unregisterReceiver(broadcastReceiver);
                }
        
            private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver()
                {
                @Override
                public void onReceive(Context context, Intent intent)
                    {
                    final String action = intent.getAction();
                    if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION))
                        {
                        if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false))
                            {
                            // wifi is enabled
                            }
                        else
                            {
                            // wifi is disabled
                            }
                        }
                    }
                };
            }
        

        【讨论】:

          【解决方案14】:

          这是我的代码示例,它考虑了用户在连接到 Wifi 时只允许通信的偏好。

          在尝试下载内容之前,我从 IntentService 内部调用此代码。

          请注意,如果没有任何类型的网络连接,NetworkInfo 将是 null

          private boolean canConnect()
          {
              ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
          
              boolean canConnect = false;
              boolean wifiOnly = SharedPreferencesUtils.wifiOnly();
          
              NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
              if(networkInfo != null)
              {
                  if(networkInfo.isConnected())
                  {
                      if((networkInfo.getType() == ConnectivityManager.TYPE_WIFI) ||
                         (networkInfo.getType() != ConnectivityManager.TYPE_WIFI && !wifiOnly))
                      {
                          canConnect = true;
                      }
                  }
              }
          
              return canConnect;
          }
          

          【讨论】:

            【解决方案15】:

            如果您让用户选择覆盖每次询问的正常行为,您可以启动 wifi 连接。

            我选择使用三种方法...

            public boolean isOnline() 
            {
             ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
             NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
             return (networkInfo != null && networkInfo.isConnected());
            }  
            

            这是快速检查是否有 Wifi 或 CellData 的互联网连接。从这里你可以选择你想要采取的行动。是否处于飞行模式也需要检查。

            在单独的线程上。 我将变量 IpAddress 设置为 = "" 并轮询,直到我有一个有效的 IP 地址。

              WifiManager wifi;
              wifi = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
              WifiInfo wifiInfo = wifi.getConnectionInfo();
              int ipAddress = wifiInfo.getIpAddress();
              String ip = null;
              ip = String.format("%d.%d.%d.%d",
              (ipAddress & 0xff),
              (ipAddress >> 8 & 0xff),
              (ipAddress >> 16 & 0xff),
              (ipAddress >> 24 & 0xff));
              Log.e(" >>IP number Begin ",ip);
            

            另一个代码sn-p...如果它没有打开它(在用户事先许可的情况下)

               if(wifi.isWifiEnabled()!=true)wifi.setWifiEnabled(true);  
            

            【讨论】:

              猜你喜欢
              • 2012-03-10
              • 2012-02-14
              • 1970-01-01
              • 2015-10-30
              • 1970-01-01
              • 2011-11-02
              • 1970-01-01
              • 1970-01-01
              • 2020-05-15
              相关资源
              最近更新 更多