एंड्रॉइड में प्रोग्रामेटिक रूप से वाईफाई अक्षम करें
यह ट्यूटोरियल दिखाता है कि WifiManager.setWifiEnabled(false) का उपयोग करके वाईफाई कैसे बंद करें।
⚠️ महत्वपूर्ण प्रतिबंध
WifiManager.setWifiEnabled() डिप्रिकेटेड है और सामान्य ऐप्स के लिए काम नहीं करता। केवल सिस्टम ऐप्स, डिवाइस ओनर, या प्रोफाइल ओनर ऐप्स वाईफाई स्टेट बदल सकते हैं। उपयोगकर्ता को सेटिंग्स में भेजना अनिवार्य है।
चरण 1: प्रोजेक्ट बनाएं
एंड्रॉइड स्टूडियो में नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट (res/layout/activity_main.xml)
<?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:orientation="vertical"
android:gravity="center"
android:padding="24dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/statusText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textStyle="bold"
android:padding="24dp"
android:background="#E3F2FD"
android:text="वाईफाई स्थिति: जांच हो रही है..."
android:clickable="true"
android:focusable="true"/>
</LinearLayout>
चरण 3: मैनिफेस्ट परमिशन (AndroidManifest.xml)
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.wifidisable">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- Android 12+ के लिए -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application ...>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
चरण 4: एक्टिविटी कोड (src/MainActivity.java)
package com.example.wifidisable;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private TextView statusText;
private WifiManager wifiManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
statusText = findViewById(R.id.statusText);
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
updateStatusText();
statusText.setOnClickListener(v -> attemptDisableWifi());
}
private void updateStatusText() {
if (wifiManager == null) {
statusText.setText("वाईफाई हार्डवेयर नहीं मिला");
return;
}
String state;
switch (wifiManager.getWifiState()) {
case WifiManager.WIFI_STATE_ENABLED: state = "सक्षम (ON)"; break;
case WifiManager.WIFI_STATE_DISABLED: state = "अक्षम (OFF)"; break;
case WifiManager.WIFI_STATE_ENABLING: state = "सक्षम हो रहा है..."; break;
case WifiManager.WIFI_STATE_DISABLING: state = "अक्षम हो रहा है..."; break;
case WifiManager.WIFI_STATE_UNKNOWN: default: state = "अज्ञात"; break;
}
statusText.setText("वाईफाई: " + state + "\nटैप करके अक्षम करने का प्रयास करें");
}
private void attemptDisableWifi() {
if (wifiManager == null) {
Toast.makeText(this, "वाईफाई हार्डवेयर नहीं मिला", Toast.LENGTH_SHORT).show();
return;
}
if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_DISABLED) {
Toast.makeText(this, "वाईफाई पहले से अक्षम है", Toast.LENGTH_SHORT).show();
return;
}
// Android 10+ (API 29+): सीधे अक्षम नहीं कर सकते
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
showSettingsDialog();
return;
}
// Android 9 और नीचे: डिप्रिकेटेड मेथड लेकिन काम कर सकता है
boolean success = wifiManager.setWifiEnabled(false);
String msg = success ? "वाईफाई अक्षम करने का अनुरोध भेजा" : "अक्षम करने में विफल (परमिशन/प्रतिबंध)";
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
// स्थिति अपडेट
statusText.postDelayed(this::updateStatusText, 1500);
}
private void showSettingsDialog() {
new android.app.AlertDialog.Builder(this)
.setTitle("वाईफाई अक्षम करें")
.setMessage("Android 10+ में ऐप्स सीधे वाईफाई बंद नहीं कर सकते।\nकृपया सेटिंग्स में जाकर मैन्युअली बंद करें।")
.setPositiveButton("वाईफाई सेटिंग्स खोलें", (dialog, which) -> {
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
startActivity(intent);
})
.setNegativeButton("रद्द", null)
.show();
}
}
आधुनिक विकल्प (Android 10+)
1. उपयोगकर्ता को सेटिंग्स भेजें (मानक)
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
startActivity(intent);
// या क्विक सेटिंग्स पैनल (Android 11+)
Intent intent = new Intent(Settings.ACTION_WIFI_IP_SETTINGS); // नहीं
// सही: Settings.Panel.ACTION_WIFI
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI);
startActivityForResult(panelIntent, 100);
}
2. WifiManager.isScanAlwaysAvailable() - केवल स्कैन
// वाईफाई बंद होने पर भी स्कैन कर सकता है या नहीं boolean canScan = wifiManager.isScanAlwaysAvailable();
3. Device Policy Manager (एंटरप्राइज़/MDM ऐप्स)
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName adminComponent = new ComponentName(this, MyAdminReceiver.class);
if (dpm.isAdminActive(adminComponent)) {
// डिवाइस ओनर/प्रोफाइल ओनर के रूप में वाईफाई नियंत्रित करें
dpm.setWifiEnabled(adminComponent, false);
}
4. WiFi Suggestion API (Android 10+) - नेटवर्क सुझाव दें
// वाईफाई बंद नहीं करता, लेकिन नेटवर्क सुझाता है
WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
.setSsid("MyNetwork")
.setWpa2Passphrase("password")
.build();
List suggestions = Arrays.asList(suggestion);
wifiManager.addNetworkSuggestions(suggestions);
चरण 5: टेस्ट करें
- ऐप चलाएं
- वाईफाई स्थिति देखें
- टेक्स्ट पर टैप करें
- Android 10+: वाईफाई सेटिंग्स डायलॉग/पैनल खुलेगा
- Android 9-: सीधे अक्षम करने का प्रयास करेगा
