บทความนี้สาธิตวิธีเปิด/ปิด 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);
}
}