2013-02-12 3 views
1

Я хотел бы постоянно проверять, подключен ли телефон к определенной беспроводной сети. Конечно, я думал о службе и SSID сети, но как?Постоянная проверка на изменение беспроводной сети

+1

"Постоянно проверять"? Вы понимаете, сколько батарея убьет? [Просто проверьте его один раз] (http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html), затем [зарегистрируйте приемник, чтобы проверить изменения в подключении] (http: // stackoverflow. ком/вопросы/3307237/как-кан-я-монитор--сети связи, статус-в-андроида). – Eric

+0

Существует широковещательная передача WiFi_STATE_CHANGED. Вы можете использовать эту трансляцию для обнаружения изменений в сети Wi-Fi. – VendettaDroid

+0

@ Ник, ты прав, я имел в виду каждые 5 минут. – incredikid

ответ

4

Вы хотите

<intent-filter> 
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> 
<action android:name="android.net.wifi.STATE_CHANGE"/> 
</intent-filter> 

В ресивере теге.

Или, если вы хотите получить больше контроля над ним, перед регистрацией BroadcastReceiver настроить их:

final IntentFilter filters = new IntentFilter(); 
filters.addAction("android.net.wifi.WIFI_STATE_CHANGED"); 
filters.addAction("android.net.wifi.STATE_CHANGE"); 
super.registerReceiver(yourReceiver, filters); 

WIFI_STATE_CHANGED

Broadcast намерения действия о том, что Wi-Fi был включен, отключен , включение, отключение или неизвестность. Один дополнительный параметр обеспечивает это состояние как int. Другая дополнительная опция обеспечивает предыдущее состояние, если оно доступно.

STATE_CHANGE

Broadcast цель действия, указывающее, что состояние подключения Wi-Fi изменилось. Один дополнительный параметр предоставляет новое состояние в виде объекта NetworkInfo. Если новое состояние подключено, дополнительные опции могут предоставлять BSSID и WifiInfo точки доступа. в виде строки

Кроме того, вам необходимо указать правильные разрешения:

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

Всего Исходный код:Download

AndroidManifest.xml

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.temp.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver android:name="com.example.temp.MyWiFiStateListener"> 
     <intent-filter > 
      <action android:name="android.net.wifi.STATE_CHANGE"/> 
     </intent-filter> 
    </receiver> 
</application> 

MainActivity.java

package com.example.temp; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 

Broadcast Receiver:

package com.example.temp; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.net.wifi.WifiInfo; 
import android.net.wifi.WifiManager; 
import android.util.Log; 

public class MyWiFiStateListener extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     String action = intent.getAction(); 
     Log.d("TEMP", action); 
     if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){ 
      NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
      if(info.getType() == ConnectivityManager.TYPE_WIFI){ 
       WifiManager myWifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
       WifiInfo wifiInfo = myWifiManager.getConnectionInfo(); 
       Log.d("TEMP","BSSID :: " + wifiInfo.getBSSID() + "SSID :: " + wifiInfo.getSSID()); 
      } 
     } 
    } 

} 
+0

Звучит как хорошее решение. Я проверю это прямо сейчас. спасибо – incredikid

+0

Дайте мне знать, если вам нужно все решение. – VendettaDroid

+0

ok Я немного смутился. Поэтому, если я создаю BroadcastReceiver и добавлю фильтры намерений, как я могу проверить BSSID? – incredikid

Смежные вопросы