Android:プログラムでWifiまたはインターネット接続を有効/無効にする方法


82

Connectivity Managerクラスを使用すると、wifiまたはインターネットネットワークにアクセスできます。

ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

// ARE WE CONNECTED TO THE NET
if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ||
  connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) {
  // ...
}

ここで0、およびは1それぞれモバイル接続とWi-Fi接続を指します

Androidデバイスが両方に接続されている場合、ネットワークを切り替えることはできますか、それともネットワークを無効にすることはできますか?関数を使用するように:

connec.getNetworkInfo(0).setState(NetworkInfo.State.DISCONNECTED);

モバイルデータ無効化オプションの解決策はありましたか?
Parthi

回答:


183

私はwifiを有効または無効にすることを知っています:

WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);

ステータスは、trueまたはfalse要件ごとにあります。

編集:

マニフェストファイルには、次の権限も必要です。

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

47
マニフェストでも:<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
Comic Sans MS Lover

2
これはwifiManager.reconnect()とは異なりますか?wifiManager.reassociate()はどうですか?また、上記のアプローチでWiFiをリセットしたい場合は、wifiManager.setWifiEnabled(false)とwifiManager.setWifiEnabled(true)を連続して呼び出すことができますか?または、最初に無効にしてから、信号(放送受信機など)を待ってから再度有効にする必要がありますか?
マーシー2013年

あなたがしたい場合は、デモのチュートリアルFOTそのここに:demoadda.com/demo/android/...
のKishan Dhamat

“<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />”も必要です。
zionpi 2016年

アプリケーションからMデバイスのWiFiを制御することは可能ですか?
Nithinjith 2017年

30

WiFiを有効にするには:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(true);

WiFiを無効にするには:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(false);

注:WiFi状態でアクセスするには、AndroidManifest.xmlファイル内に次の権限を追加する必要があります。

android.permission.ACCESS_WIFI_STATE
android.permission.UPDATE_DEVICE_STATS 
android.permission.CHANGE_WIFI_STATE

4
少なくともAndroid4.2では、CHANGE_WIFI_STATEのみが必要です
voghDev 2014

1
UPDATE_DEVICE_STATSはシステムアプリ専用です
marienke 2016

Android Qから、Wi
Ravindra Kushwaha

12

完全なソリューション:

try {
    WifiManager wifi = (WifiManager) 
        context.getSystemService(Context.WIFI_SERVICE);

    WifiConfiguration wc = new WifiConfiguration();
    wc.SSID = "\"SSIDName\"";
    wc.preSharedKey  = "\"password\"";
    wc.hiddenSSID = true;
    wc.status = WifiConfiguration.Status.ENABLED; 

    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

    wc.allowedPairwiseCiphers
        .set(WifiConfiguration.PairwiseCipher.TKIP);
    wc.allowedPairwiseCiphers
        .set(WifiConfiguration.PairwiseCipher.CCMP);
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);

    boolean b=wifi.isWifiEnabled();
    if (b) {
        wifi.setWifiEnabled(false);
        Toast.makeText(context, "yes", Toast.LENGTH_SHORT).show();
    } else {
        wifi.setWifiEnabled(true);
        Toast.makeText(context, "no", Toast.LENGTH_SHORT).show();
    }
    //Log.d("WifiPreference", "enableNetwork returned " + b );

} catch (Exception e) {
    e.printStackTrace();
}

参照:http//amitkumar-android.blogspot.com/p/installation-steps.html


1
Wi-Fi構成でWi-Fiマネージャーを設定するための呼び出しがありません:wifi.addNetwork(wc);
エラー454 2012

4
SSIDとパスワードをハードコーディングするのはなぜですか?良い考えではありません。
lifeson106 2014年

@ lifeson106デモンストレーションのみを目的としていると思います。
バートラムギルフォイル

4

Wifiの無効化を有効にするには、WifiManagerクラスを使用してWifiのシステム(Androidデバイス)サービスを取得します。

WifiManager wifi =(WifiManager)getSystemService(Context.WIFI_SERVICE); 

これwifiで、WifiManagerクラスのオブジェクトを使用してWi-Fiステータスを取得します。

if(wifi.isWifiEnabled())
    //Perform Operation
else
    //Other Operation

そして最も重要なことは、Androidマニフェストファイルで次の権限を与えることを忘れないでください。

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

AndroidでWifiを有効/無効にするプロジェクトの詳細情報と完全なサンプルコードを入手するには、私のWebサイトのリンクにアクセスしてください


3

ではAndroidのQ(アンドロイド10)あなたは、プログラム、もはや/無効無線LANを有効にすることはできません。設定パネルを使用して、wifi接続を切り替えます。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
    startActivityForResult(panelIntent, 0)
} else {
    // use previous solution, add appropriate permissions to AndroidManifest file (see answers above)
    (this.context?.getSystemService(Context.WIFI_SERVICE) as? WifiManager)?.apply { isWifiEnabled = true /*or false*/ }
}

1

マニフェストにこの権限を追加し、上記のコードを使用してWiFiの状態を変更します。

 <!--permission ge enable and disable WIFI in android-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

1

コンテキストオブジェクトに直接アクセスできませんでした。
私の解決策は次のとおりです。

Context appContext = Android.App.Application.Context;
var wifiManager = (WifiManager)appContext.GetSystemService(WifiService);
wifiManager.SetWifiEnabled(state);

また、私はいくつかの文章を変更しなければなりませんでした。WIFI_SERVICEとWifiService。


0

次のコードを使用して、Android10より前のデバイスでwifiを有効/無効にすることができます。

WifiManager wifiManager = 
(WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);

wifiManager.setWifiEnabled(status);

ただし、Android 10ではこれを実行できなくなり、おそらく同様に実行できることに注意してください
https://issuetracker.google.com/issues/141011684


0

Android 10(Q)以降のwifiは有効/無効にできません。設定インテントを開く必要があります。

// for android Q and above
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            Intent panelIntent = new 
Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY);
            startActivityForResult(panelIntent, 0);
        } else {
            // for previous android version
            WifiManager wifiManager = (WifiManager) 
this.getApplicationContext().getSystemService(WIFI_SERVICE);
            wifiManager.setWifiEnabled(true);
        }

マニフェストでは、

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

0

このメソッドは、AndroidQ以降非推奨になりました。

試してみてくださいこれは本当に役立ちます。

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {// if build version is less than Q try the old traditional method
                    if (!wifiManager.isWifiEnabled()) {
                        wifiManager.setWifiEnabled(true);
                        btnOnOff.setText("Wifi ONN");
                    } else {
                        wifiManager.setWifiEnabled(false);
                        btnOnOff.setText("Wifi OFF");
                    }
                } else {// if it is Android Q and above go for the newer way    NOTE: You can also use this code for less than android Q also
                    Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI);
                    startActivityForResult(panelIntent, 1);
                }

例を挙げて新しい/好ましい方法を指摘する価値はありますか?
user1016765

これは質問に対する答えを提供しません。十分な評判得られたら、どの投稿にもコメントできるようになります。代わりに、質問者からの説明を必要としない回答を提供してください。-レビューから
ライアンM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.