Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีเปิด/ปิด Wi-Fi โดยโปรแกรมใน Android (วิธีง่าย)

บทความนี้สาธิตวิธีเปิด/ปิด Wi-Fi ด้วย WifiManager ผ่านปุ่มกด โดยใช้ attribute android:onClick ใน XML

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

Android Studio → File → New Project

ขั้นตอนที่ 2: Layout (activity_main.xml)

ใช้ android:onClick เพื่อเชื่อมต่อเมธอดโดยตรง:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="WiFi ON"
        android:onClick="enableWifi" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="WiFi OFF"
        android:onClick="disableWifi" />

</LinearLayout>

ขั้นตอนที่ 3: MainActivity.java

import android.content.Context;
import android.net.wifi.WifiManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private WifiManager wifiManager;

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

        // ใช้ getApplicationContext() เพื่อป้องกัน Memory Leak
        wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    }

    public void enableWifi(View view) {
        wifiManager.setWifiEnabled(true);
        Toast.makeText(this, "WiFi Enabled", Toast.LENGTH_SHORT).show();
    }

    public void disableWifi(View view) {
        wifiManager.setWifiEnabled(false);
        Toast.makeText(this, "WiFi Disabled", Toast.LENGTH_SHORT).show();
    }
}

ขั้นตอนที่ 4: สิทธิ์ใน AndroidManifest.xml

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

⚠️ ข้อจำกัดสำคัญ (Android 10+ / API 29+)

WifiManager.setWifiEnabled() ถูก Deprecated และทำงานไม่ได้สำหรับแอปทั่วไป

  • Android 9 (API 28) และก่อน: ทำงานปกติ
  • Android 10 (API 29) ขึ้นไป: คืนค่า false เสมอ สำหรับแอปที่ไม่ใช่ System App

วิธีทางเลือกสำหรับ Android 10+ (แนะนำ)

1. ใช้ Settings Panel (API 29+)

// เปิดแผงตั้งค่า Wi-Fi ให้ผู้ใช้เปิด/ปิดเอง
Intent intent = new Intent(Settings.Panel.ACTION_WIFI);
startActivityForResult(intent, REQUEST_CODE);

2. นำไปหน้าตั้งค่า Wi-Fi โดยตรง

Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
startActivity(intent);

3. ใช้ WifiManager เฉพาะสำหรับสแกน/อ่านสถานะ (ยังทำงานได้)

// สแกน Wi-Fi ยังทำงานได้
wifiManager.startScan();
List<ScanResult> results = wifiManager.getScanResults();

สรุปการเลือกวิธี

Android Versionวิธีที่แนะนำ
API < 29 (Android 9-)WifiManager.setWifiEnabled() ✓
API 29+ (Android 10+)Settings Panel / Settings Intent
ทุกเวอร์ชันIntent.ACTION_WIFI_SETTINGS

โค้ดรองรับทุกเวอร์ชัน (Backward Compatible)

public void toggleWifi(boolean enable) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // API 29+
        // ใช้ Settings Panel
        Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI);
        startActivity(panelIntent);
    } else {
        // ใช้ WifiManager ตรงๆ
        wifiManager.setWifiEnabled(enable);
    }
}