2011-07-06 11 views
6

私のアプリの機能の一部は、WiFiアクセスポイントのリストをスキャンして表示し、ユーザーが選択したものに接続することです。私はこの機能が働いています。今、私はまた、接続が "通過する"ときに通知されることを望みます。これはかなりシンプルなはずですが、私は自分がつまずくと感じます。WiFiアクセスポイントに接続したときにWIFI_STATE_CHANGED_ACTIONインテントが受信されませんでしたか?

私はここで様々な投稿を読んでおり、すべてWifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTIONまたはWifiManager.WIFI_STATE_CHANGED_ACTIONの登録について言及しています。しかし、どちらも私のために働くものではありません。誰もこのコードで間違いを発見できますか? (私がスキャンし、ものを行う部分を除外しています)

期待される動作:とすぐに接続が(つまり、私は通知バーの「接続」アイ​​コンを見たとき)、成功すると放送は受信されるべきであり、私は乾杯を見なければならない。

観察された行動:アプリが最初に起動したとき、私はそれに切り替えたときに(すなわち、onResume()が呼ばれるたびに、または私は意思に登録する時はいつでも私は、疑う)放送が受信され

public class WifiScanActivity extends Activity { 

    WifiManager mainWifi; 
    WifiReceiver mWifiReceiver; 
    IntentFilter mIntentFilter; 
    private final static String TAG = "WifiScanActivity"; 
    public static final String INTENT_FOR_WIFI_CONNECTED = 
      WifiManager.WIFI_STATE_CHANGED_ACTION; 
    // public static final String INTENT_FOR_WIFI_CONNECTED = 
    // WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
     mWifiReceiver = new WifiReceiver(); 
     mIntentFilter = new IntentFilter(); 
     mIntentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 
     mIntentFilter.addAction(INTENT_FOR_WIFI_CONNECTED); 
     registerReceiver(mWifiReceiver, mIntentFilter); 
     mainWifi.startScan(); 
    } 

    protected void onPause() { 
     unregisterReceiver(mWifiReceiver); 
     super.onPause(); 
    } 

    protected void onResume() { 
     registerReceiver(mWifiReceiver, mIntentFilter); 
     super.onResume(); 
    } 

    class WifiReceiver extends BroadcastReceiver { 

     public void onReceive(Context c, Intent intent) { 
      Log.d(TAG, 
       "In WifiReceiver: Broadcast Received = " + intent.getAction()); 
      if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent 
       .getAction())) { 
       // Display the ListView and connect to the selected AP 
      } else if (INTENT_FOR_WIFI_CONNECTED.equals(intent.getAction())) { 
       if (WifiManager.WIFI_STATE_ENABLED == intent.getIntExtra(
        WifiManager.EXTRA_WIFI_STATE, 0)) { 
        displayNetworkInfo(); 
       } 
       /*if(true == intent.getBooleanExtra(
       * WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)){ 
       * displayNetworkInfo(); 
       }*/ 
      } 
     } 
    } 

    private void displayNetworkInfo() { 
     WifiInfo wifiInfo = mainWifi.getConnectionInfo(); 
     String ssid = wifiInfo.getSSID(); 
     int ip = wifiInfo.getIpAddress(); 
     String message = "Connection established.\nSSID = " + ssid 
      + "; IP Address = " + Helper.displayIpAddress(ip); 
     Log.d(TAG, message); 
     Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 
    } 
} 

WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTIONのコードのコメントを外すと、ブロードキャストがまったく受信されないことがあります。

:私は、私はAndroidの無線LAN設定画面でステータスを確認するので、接続が成功したことを知っています。状態の後に放送を取得するには

答えて

19

[OK]を参照して変更されている、私はそれを考え出しました。私は間違った意図に登録していたことが判明しました。私は WifiManager.NETWORK_STATE_CHANGED_ACTIONを使っているはずです。ここで

は、コードの関連部分の抜粋です:

mIntentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) ; 
mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 


public void onReceive(Context c, Intent intent) { 

if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) { 

    NetworkInfo nwInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
    if(NetworkInfo.State.CONNECTED.equals(nwInfo.getState())){//This implies the WiFi connection is through 
     displayNetworkInfo(); 
    } 
} 
-1

this

+2

あなたはどのようにショーにリンクされている記事スキャン結果が利用可能なときにブロードキャストを受信する。私のアプリはすでにそれを成功させています。私が必要とするのは、アクセスポイントへのWiFi接続が成功するとすぐにブロードキャストを取得することです。私はこの記事に関連するものは何も見ませんでした。 – curioustechizen

0

私は放送を検出するために、マニフェストにこれらの権限を追加した後に検出することができた:

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
関連する問題