2012-04-20 2 views
1

Wi-Fi 네트워크를 감지하고 선택한 네트워크에 연결 (연결) 한 후 네트워크를 선택한 간단한 앱을 만들고 싶습니다.Android : 코드를 통해 Wi-Fi를 실행하는 방법

필자는 탐지 단계에 대한 코드를 작성했지만 어떻게 onItemClick()에서 선택한 네트워크에 연결할 수 있습니까? 코드를 제안하십시오.

+0

를 추가 할 기억 하는가? 예 의미하는 경우, 그냥 시도해보십시오 [this] (http://stackoverflow.com/q/8818290/940096) – Praveenkumar

+0

내 대답이 도움이된다면 친절하게 대답으로 표시하십시오. – Nimit

답변

3

Android는 WiFi 연결을 완벽하게 지원합니다. 주요 구성 요소는 시스템 제공 WiFiManager입니다. 평소와 같이 getSystemServices()를 호출하여 현재 컨텍스트로 가져옵니다.

일단 WiFiManager가 있으면 WiFiInfo 개체 형태로 현재 WiFi 연결을 요청할 수 있습니다. getConfiguredNetworks()를 통해 현재 사용 가능한 모든 네트워크를 요청할 수도 있습니다. WifiConfigurations 목록이 제공됩니다. 이 예에서

는 또한

package com.example; 

import java.util.List; 

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.IntentFilter; 
import android.net.wifi.WifiConfiguration; 
import android.net.wifi.WifiInfo; 
import android.net.wifi.WifiManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class WiFiDemo extends Activity implements OnClickListener { 
    private static final String TAG = "WiFiDemo"; 
    WifiManager wifi; 
    BroadcastReceiver receiver; 

    TextView textStatus; 
    Button buttonScan; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Setup UI 
     textStatus = (TextView) findViewById(R.id.textStatus); 
     buttonScan = (Button) findViewById(R.id.buttonScan); 
     buttonScan.setOnClickListener(this); 

     // Setup WiFi 
     wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 

     // Get WiFi status 
     WifiInfo info = wifi.getConnectionInfo(); 
     textStatus.append("\n\nWiFi Status: " + info.toString()); 

     // List available networks 
     List<WifiConfiguration> configs = wifi.getConfiguredNetworks(); 
     for (WifiConfiguration config : configs) { 
      textStatus.append("\n\n" + config.toString()); 
     } 

     // Register Broadcast Receiver 
     if (receiver == null) 
      receiver = new WiFiScanReceiver(this); 

     registerReceiver(receiver, new IntentFilter(
       WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
     Log.d(TAG, "onCreate()"); 
    } 

    @Override 
    public void onStop() { 
     unregisterReceiver(receiver); 
    } 

    public void onClick(View view) { 
     Toast.makeText(this, "On Click Clicked. Toast to that!!!", 
       Toast.LENGTH_LONG).show(); 

     if (view.getId() == R.id.buttonScan) { 
      Log.d(TAG, "onClick() wifi.startScan()"); 
      wifi.startScan(); 
     } 
    } 

} 

WiFiScanReceiver.java

패키지 com.example 새로운 네트워크

WiFiDemo.java 대한 스캔을 수행하는 방송 수신 장치를 등록 ;

import java.util.List; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.wifi.ScanResult; 
import android.net.wifi.WifiManager; 
import android.util.Log; 
import android.widget.Toast; 

public class WiFiScanReceiver extends BroadcastReceiver { 
    private static final String TAG = "WiFiScanReceiver"; 
    WiFiDemo wifiDemo; 

    public WiFiScanReceiver(WiFiDemo wifiDemo) { 
    super(); 
    this.wifiDemo = wifiDemo; 
    } 

    @Override 
    public void onReceive(Context c, Intent intent) { 
    List<ScanResult> results = wifiDemo.wifi.getScanResults(); 
    ScanResult bestSignal = null; 
    for (ScanResult result : results) { 
     if (bestSignal == null 
      || WifiManager.compareSignalLevel(bestSignal.level, result.level) < 0) 
     bestSignal = result; 
    } 

    String message = String.format("%s networks found. %s is the strongest.", 
     results.size(), bestSignal.SSID); 
    Toast.makeText(wifiDemo, message, Toast.LENGTH_LONG).show(); 

    Log.d(TAG, "onReceive() message: " + message); 
    } 

} 

이 예제의 레이아웃 파일은 매우 간단합니다. 그것은 하나의 TextView 스크롤 목적으로 ScrollView에 래핑됩니다.

/res/layout/main.xml가 의 AndroidManifest.xml 파일의 경우

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <Button android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:id="@+id/buttonScan" 
    android:text="Scan"></Button> 
    <ScrollView android:id="@+id/ScrollView01" 
    android:layout_width="wrap_content" android:layout_height="wrap_content"> 
    <TextView android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:id="@+id/textStatus" 
     android:text="WiFiDemo" /> 
    </ScrollView> 

</LinearLayout> 

, 단지 무선 랜을 사용하는 권한을 추가해야합니다 :

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

당신이 할 수있는 이 WifiManager를 사용하여. 시스템에서 Wifi 서비스를 가져오고 Wi-Fi가 켜지는지 확인한 다음 켜거나 끄십시오.

private WifiManager wifiManager; 
@Override 
public void onCreate(Bundle bund) { 
    wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 
    if(wifiManager.isWifiEnabled()){ 
    wifiManager.setWifiEnabled(false); 
    }else{ 
    wifiManager.setWifiEnabled(true); 
    } 
} 

권한 당신은 와이파이 네트워크의 목록과 특정 와이파이 네트워크를 선택합니다 또한

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