2010年7月14日 星期三

Android學習筆記 - WIFI控制(開啟、關閉)

1. WIFI的控制,主要是透過WifiManager來管理WIFI。

2.WifiManagerExample.java
package tw.nicky.WifiManagerExample;
import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class WifiManagerExample extends Activity {
 private WifiManager wiFiManager;
 private Button turnOnWifiButn;
 private Button turnOffWifiButn;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  // 取得WifiManager
  wiFiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
  turnOnWifiButn = (Button) findViewById(R.id.turnOnWifiButn);
  turnOffWifiButn = (Button) findViewById(R.id.turnOffWifiButn);

  // 開啟wifi
  turnOnWifiButn.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    //若wifi狀態為關閉則將它開啟
    if (!wiFiManager.isWifiEnabled()) {
     wiFiManager.setWifiEnabled(true);
    }
   }
  });

  // 關閉wifi
  turnOffWifiButn.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    //若wifi狀態為開啟則將它關閉
    if (wiFiManager.isWifiEnabled()) {
     wiFiManager.setWifiEnabled(false);
    }
   }
  });
 }
}

3. main.xml(Layout)
<?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:text="開啟Wifi" 
android:id="@+id/turnOnWifiButn" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content">
</Button>

<Button 
android:text="關閉Wifi" 
android:id="@+id/turnOffWifiButn" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content">
</Button>
</LinearLayout>
4. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="tw.nicky.WifiManagerExample"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".WifiManagerExample"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
</manifest> 


5. 執行畫面

8 則留言:

  1. Nicky Cho您好:

    我是Android SDK初學者,在Eclipse環境下編輯時,第20,21行的R.id.turnOnWifiButn以及
    R.id.turnOffWifiButn出現錯誤訊息(id cannot be resolved ro is not a field) 請問這是我的R.JAVA裡頭沒定義好嗎? 能否也貼出R.JAVA呢? 感恩

    回覆刪除
  2. Nicky 大大

    真搞笑 原來是我沒修改main.xml跟AndroidManifest.xml, 所以R.JAVA才沒顯示R.id.


    程式demo成功囉 感恩 希望能再看到大大的文章

    回覆刪除
  3. 想請問一下~
    如果要用到WIFI
    eclipse是否要開啟WIFI功能
    可是我無法將他打開~他都會顯示error

    如果是上面的demo檔
    我遇到和上面的大大一樣的問題
    可是我main.xml和AndroidManifest.xml都有修改~"~

    回覆刪除
  4. 一直修改道都沒錯誤了
    但還是跑不出來~"~
    而且想問一下~
    就是這個程式沒有main這樣可以嗎??

    回覆刪除
  5. 請問一下!!
    照您這樣就可以控制Wifi的開關

    但若我一個設備他是AP他會一直吐封包資訊
    我連到他後! 我要如何去連接它呢??
    可以給個方向嗎

    回覆刪除
  6. Nicky 高手 大大

    請教一下
    Android WIFI 輸入IP ,不管是否有配對連線 ,
    (按 開啟 ) 第1秒傳 1 ,第2秒傳 2 ~~~~ ,第9秒傳 9 ,第1秒傳 1 [重復傳送資料]

    (按 關閉 ) 才停止傳送資料

    可以請版主寫一個範例示範
    我是ANDROID新手 ,不知道如何寫
    Thank you!!

    回覆刪除
  7. 在WifiManagerExample.java的第17行,最後的main出現錯誤
    錯誤訊息如下:
    main cannot be resolved or is not a field

    我出現此錯誤....我直接複製貼上欸
    哪裡出了問題???

    回覆刪除
  8. 版主 您好 我想問一下,有辦法判斷讓wifi自動連線最好的訊號嗎 ?
    假設 有好幾個wifi節點,讓手機自動連到最好的訊號

    回覆刪除