Bagaimana saya melihat apakah Wi-Fi terhubung di Android?

237

Saya tidak ingin pengguna saya bahkan mencoba mengunduh sesuatu kecuali mereka memiliki Wi-Fi yang terhubung. Namun, saya hanya bisa mengetahui apakah Wi-Fi diaktifkan, tetapi mereka masih bisa memiliki koneksi 3G.

android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
    return false;
}

Namun, negara bukanlah yang saya harapkan. Meskipun Wi-Fi terhubung, saya menjadi OBTAINING_IPADDRnegara.

Nathan Schwermann
sumber

Jawaban:

463

Anda harus dapat menggunakan ConnectivityManager untuk mendapatkan status adaptor Wi-Fi. Dari sana Anda dapat memeriksa apakah terhubung atau bahkan tersedia .

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (mWifi.isConnected()) {
    // Do whatever
}

CATATAN: Perlu dicatat (untuk kami n00bies di sini) yang perlu Anda tambahkan

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

untuk Anda

AndroidManifest.xml agar ini berfungsi.

NOTE2 : public NetworkInfo getNetworkInfo (int networkType)sekarang sudah usang:

Metode ini sudah tidak digunakan lagi di API level 23. Metode ini tidak mendukung beberapa jaringan yang terhubung dari jenis yang sama. Gunakan getAllNetworks () dan sebaliknya getNetworkInfo (android.net.Network).

NOTE3 : public static final int TYPE_WIFIsekarang sudah usang:

Konstanta ini sudah tidak digunakan lagi di API level 28. Sebaliknya aplikasi harus menggunakan NetworkCapabilities.hasTransport (int) atau requestNetwork (NetworkRequest, NetworkCallback) untuk meminta jaringan yang sesuai. untuk transportasi yang didukung.

Jason Knight
sumber
72
Perlu dicatat (bagi kami noobies di sini) bahwa Anda perlu menambahkan android.permission.ACCESS_NETWORK_STATEAndroidManifest.xml Anda agar ini berfungsi.
mgalgs
10
Dalam versi Android yang sangat baru, Anda perlu memeriksa NULL di mWiFi ... kode Anda di sini bisa menimbulkan kesalahan null pointer. Lihat developer.android.com/training/basics/network-ops/managing.html dan khususnya "Metode getActiveNetworkInfo () mengembalikan NetworkInfo ..."
eb80
1
Ini bekerja untuk saya dengan antarmuka Ethernet juga. Saya baru saja berubah ke ConnectivityManager.TYPE_ETHERNET
MBH
3
Metode NetworkInfo.isConnected () sekarang tidak digunakan dalam API-23. Saya memposting solusi di bawah ini.
revolusioner
1
NetworkInfo.getType () dan ConnectivityManager.TYPE_WIFI sekarang tidak digunakan lagi di API 28. Untuk menghindari peringatan serat, Anda harus menggunakan sesuatu seperticonnectivityManager.getNetworkCapabilities(network).hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
Vadik
75

Karena metode NetworkInfo.isConnected () sekarang tidak digunakan lagi di API-23 , berikut adalah metode yang mendeteksi jika adaptor Wi-Fi aktif dan juga terhubung ke titik akses menggunakan WifiManager sebagai gantinya:

private boolean checkWifiOnAndConnected() {
    WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);

    if (wifiMgr.isWifiEnabled()) { // Wi-Fi adapter is ON

        WifiInfo wifiInfo = wifiMgr.getConnectionInfo();

        if( wifiInfo.getNetworkId() == -1 ){
            return false; // Not connected to an access point
        }
        return true; // Connected to an access point
    }
    else {
        return false; // Wi-Fi adapter is OFF
    }
}
revolusioner
sumber
4
Perlu disebutkan bahwa wifiInfo bisa nol jadi saya pikir Anda harus memeriksa nol sebelum mendapatkan id jaringan
Nonos
2
NetworkInfo.isConnected()tidak terlihat usang bagi saya.
EricRobertBrewer
Jangan lupa untuk menambahkan izin:android.permission.ACCESS_WIFI_STATE
Ton Snoei
1
Ini tidak lagi berfungsi di Android Q tanpa izin lokasi dan mode lokasi diaktifkan, lihat issuetracker.google.com/issues/136021574 .
Konsumierer
Komentar @EricRobertBrewer tidak lagi terkini. sekarang, API 29+ yang sudah tidak digunakan lagi.
nuKs
35

Saya cukup menggunakan yang berikut ini:

SupplicantState supState; 
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
supState = wifiInfo.getSupplicantState();

Yang akan mengembalikan salah satu dari status ini pada saat Anda memanggil getSupplicantState ();

ASOSIASI - Asosiasi selesai.

ASSOCIATING - Mencoba mengaitkan dengan titik akses.

SELESAI - Semua otentikasi selesai.

DISCONNECTED - Status ini menunjukkan bahwa klien tidak terkait, tetapi cenderung mulai mencari titik akses.

DORMANT - Status tambahan Android yang dilaporkan saat klien mengeluarkan perintah DISCONNECT eksplisit.

FOUR_WAY_HANDSHAKE - Jabat Tangan 4-arah WPA sedang berlangsung.

GROUP_HANDSHAKE - Jabat Tangan Kunci Grup WPA sedang berlangsung.

INaktif - Keadaan tidak aktif.

INVALID - Kondisi semu yang biasanya tidak pernah terlihat.

SCANNING - Memindai jaringan.

UNINITIALISASI - Tidak ada koneksi.

Donal Rafferty
sumber
hai Donal. Saya telah menggunakan cara yang sama untuk mendapatkan apakah perangkat kami terhubung ke wifi. Tapi saya juga perlu tahu nama App saat ini menggunakan WIFI. Bagaimana itu bisa dilakukan?
AbhishekB
@AbhishekB, maaf tapi saya tidak punya pengalaman dengan itu, mungkin mencoba melihat beberapa aplikasi pemantauan Wi-Fi, lihat apakah ada sumber terbuka di mana Anda dapat meninjau kode.
Donal Rafferty
Saya curiga dengan solusi ini karena pemohon hanya digunakan jika WPA (atau beberapa variasi WPA) digunakand: jika pengguna terhubung ke AP tanpa otentikasi atau WEP maka pemohon tidak terlibat.
Tom
2
Itu masih muncul sebagai "SELESAI" meskipun saya tidak di wifi
Evan Parsons
1
apakah ada maksud siaran sistem untuk negara yang disebutkan di atas? @DonalRafferty
Rohit Singh
19

Saya menggunakan ini di aplikasi saya untuk memeriksa apakah jaringan yang aktif adalah Wi-Fi:

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI)
{

    // Do your work here

}
kuchi
sumber
Ini adalah jawaban terbaik karena memastikan bahwa activejaringan (yang akan digunakan untuk mengunduh) adalah WiFi
Gavriel
1
Ini juga jawaban terbaik yang NetworkInfo#isConnectedsudah ditinggalkan
Tash Pemhiwa
Pasti jawaban terbaik untuk tahun ini (2017).
Daniel Nugent
18

Saya telah melihat beberapa pertanyaan seperti ini dan muncul dengan ini:

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

if (wifi.isConnected()){
    // If Wi-Fi connected
}

if (mobile.isConnected()) {
    // If Internet connected
}

Saya menggunakan if untuk memeriksa lisensi saya di Root Toolbox PRO, dan sepertinya berfungsi dengan baik.

Pergerakan Luke
sumber
8
terlihat bagus tetapi saya tidak yakin mengapa Anda mendapatkan referensi kedua untuk ConnectivityManager. Dalam contoh ini connManager dan connManager1 keduanya adalah Object yang sama
Nathan Schwermann
1
Apakah TYPE_MOBLIE berarti 3gnet atau gprs net?
herbertD
1
TYPE_MOBILE berarti data apa pun yang menggunakan operator Anda - 2G (GPRS ...), 3G (HSDPA ...) atau 4G (LTE ...).
Eugen Pechanec
1
Anda dapat menambahkan TYPE_ETHERNET yang berfungsi dengan baik saat menghubungkan android ke Ethernet
MBH
1
Perlu diingat, itu getNetworkInfo()akan mengembalikan nol, jika jaringan tidak ada. Jadi jika perangkat tidak memiliki koneksi seluler, ini akan menimbulkan kesalahan. Dalam kebanyakan kasus, TYPE_ETHERNET akan menyebabkan nol dalam kasus ini, karena sebagian besar perangkat tidak akan memiliki koneksi Ethernet.
Knossos
7

Sementara jawaban Jason benar, saat ini getNetWorkInfo (int) adalah metode yang sudah usang. Jadi, fungsi selanjutnya akan menjadi alternatif yang bagus:

public static boolean isWifiAvailable (Context context)
{
    boolean br = false;
    ConnectivityManager cm = null;
    NetworkInfo ni = null;

    cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    ni = cm.getActiveNetworkInfo();
    br = ((null != ni) && (ni.isConnected()) && (ni.getType() == ConnectivityManager.TYPE_WIFI));

    return br;
}
Val Martinez
sumber
3

Menggunakan WifiManageryang dapat Anda lakukan:

WifiManager wifi = (WifiManager) getSystemService (Context.WIFI_SERVICE);
if (wifi.getConnectionInfo().getNetworkId() != -1) {/* connected */}

Metode getNeworkId mengembalikan -1 hanya ketika itu tidak terhubung ke jaringan;

menggoda
sumber
WIFI_STATE_DISABLED Nilai Konstan: 1 (0x00000001) WIFI_STATE_DISABLING Konstan Nilai: 0 (0x00000000) WIFI_STATE_ENABLED Konstan Nilai: 3 (0x00000003) WIFI_STATE_ENABLING Konstan Nilai: 2 (0x00000002) WIFI_STATE_UNKNOWN Konstan Nilai: 4 (0x00000004)
Lou Morda
Ini tidak lagi berfungsi di Android Q tanpa izin lokasi dan mode lokasi diaktifkan, lihat issuetracker.google.com/issues/136021574 .
Konsumierer
3
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
boolean is3g = manager.getNetworkInfo(
                  ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
boolean isWifi = manager.getNetworkInfo(
                    ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();

Log.v("", is3g + " ConnectivityManager Test " + isWifi);
if (!is3g && !isWifi) {
    Toast.makeText(
        getApplicationContext(),
        "Please make sure, your network connection is ON ",
        Toast.LENGTH_LONG).show();
}
else {
    // Put your function() to go further;
}
GM Ramesh
sumber
1
akan lebih baik untuk menambahkan beberapa penjelasan daripada hanya kode.
EdChum
2
Saya akan menggunakan isConnected () , dokumen mengatakan: boolean isConnectedOrConnecting ()Menunjukkan apakah konektivitas jaringan ada atau sedang dalam proses dibuat. Ini bagus untuk aplikasi yang perlu melakukan apa pun yang berhubungan dengan jaringan selain membaca atau menulis data. Untuk yang terakhir, panggil isConnected()saja, yang menjamin bahwa jaringan sepenuhnya dapat digunakan.
18446744073709551615
3

Kode berikut (dalam Kotlin) berfungsi dari API 21 hingga setidaknya versi API saat ini (API 29). Fungsi getWifiState () mengembalikan salah satu dari 3 nilai yang mungkin untuk status jaringan WiFi: Disable, EnabledNotConnected, dan Connected yang didefinisikan dalam kelas enum. Ini memungkinkan untuk mengambil keputusan yang lebih rinci seperti memberi tahu pengguna untuk mengaktifkan WiFi atau, jika sudah diaktifkan, untuk terhubung ke salah satu jaringan yang tersedia. Tetapi jika semua yang diperlukan adalah boolean yang menunjukkan jika antarmuka WiFi terhubung ke jaringan, maka fungsi lainnya adalahWifiConnected () akan memberi Anda itu. Ini menggunakan yang sebelumnya dan membandingkan hasilnya dengan Connected.

Ini terinspirasi dalam beberapa jawaban sebelumnya tetapi mencoba untuk memecahkan masalah yang diperkenalkan oleh evolusi Android API atau ketersediaan IP V6 yang perlahan meningkat. Triknya adalah menggunakan:

wifiManager.connectionInfo.bssid != null 

dari pada:

  1. getIpAddress () == 0 yang hanya berlaku untuk IP V4 atau
  2. getNetworkId () == -1 yang sekarang memerlukan izin khusus lain (Lokasi)

Menurut dokumentasi: https://developer.android.com/reference/kotlin/android/net/wifi/WifiInfo.html#getbssid itu akan mengembalikan nol jika tidak terhubung ke jaringan. Dan bahkan jika kita tidak memiliki izin untuk mendapatkan nilai sebenarnya, masih akan mengembalikan sesuatu selain nol jika kita terhubung.

Juga perhatikan hal berikut:

Pada rilis sebelum android.os.Build.VERSION_CODES # N, objek ini hanya dapat diperoleh dari Konteks # getApplicationContext (), dan bukan dari konteks turunan lainnya untuk menghindari kebocoran memori dalam proses pemanggilan.

Dalam Manifest, jangan lupa untuk menambahkan:

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

Kode yang diusulkan adalah:

class MyViewModel(application: Application) : AndroidViewModel(application) {

   // Get application context
    private val myAppContext: Context = getApplication<Application>().applicationContext

   // Define the different possible states for the WiFi Connection
    internal enum class WifiState {
        Disabled,               // WiFi is not enabled
        EnabledNotConnected,    // WiFi is enabled but we are not connected to any WiFi network
        Connected,              // Connected to a WiFi network
    }

    // Get the current state of the WiFi network
    private fun getWifiState() : WifiState {

        val wifiManager : WifiManager = myAppContext.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager

        return if (wifiManager.isWifiEnabled) {
                    if (wifiManager.connectionInfo.bssid != null)
                        WifiState.Connected
                    else
                        WifiState.EnabledNotConnected
               } else {
                    WifiState.Disabled
               }
    }

    // Returns true if we are connected to a WiFi network
    private fun isWiFiConnected() : Boolean {
        return (getWifiState() == WifiState.Connected)
    }
}
DarkJediNinja
sumber
3

The NetworkInfokelas ditinggalkan sebagai API tingkat 29, bersama dengan metode akses terkait seperti ConnectivityManager#getNetworkInfo()dan ConnectivityManager#getActiveNetworkInfo().

The dokumentasi sekarang menunjukkan orang-orang untuk menggunakan ConnectivityManager.NetworkCallbackAPI untuk pemantauan callback asynchronized, atau penggunaan ConnectivityManager#getNetworkCapabilitiesatau ConnectivityManager#getLinkPropertiesuntuk disinkronkan akses informasi jaringan

Sebaliknya, penelepon harus menggunakan ConnectivityManager.NetworkCallback API untuk mempelajari tentang perubahan konektivitas, atau beralih untuk menggunakan ConnectivityManager # getNetworkCapabilities atau ConnectivityManager # getLinkProperties untuk mendapatkan informasi secara sinkron.


Untuk memeriksa apakah WiFi terhubung, berikut adalah kode yang saya gunakan:

Kotlin:

val connMgr = applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
connMgr?: return false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    val network: Network = connMgr.activeNetwork ?: return false
    val capabilities = connMgr.getNetworkCapabilities(network)
    return capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
} else {
    val networkInfo = connMgr.activeNetworkInfo ?: return false
    return networkInfo.isConnected && networkInfo.type == ConnectivityManager.TYPE_WIFI
}

Jawa:

ConnectivityManager connMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connMgr == null) {
    return false;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    Network network = connMgr.getActiveNetwork();
    if (network == null) return false;
    NetworkCapabilities capabilities = connMgr.getNetworkCapabilities(network);
    return capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
} else {
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    return networkInfo.isConnected() && networkInfo.getType() == ConnectivityManager.TYPE_WIFI;
}

Ingatlah untuk juga menambahkan izin ACCESS_NETWORK_STATEke file Manifest Anda.

jackz314
sumber
2

Cobalah metode ini.

public boolean isInternetConnected() {
    ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean ret = true;
    if (conMgr != null) {
        NetworkInfo i = conMgr.getActiveNetworkInfo();

        if (i != null) {
            if (!i.isConnected()) {
                ret = false;
            }

            if (!i.isAvailable()) {
                ret = false;
            }
        }

        if (i == null)
            ret = false;
    } else
        ret = false;
    return ret;
}

Metode ini akan membantu menemukan koneksi internet yang tersedia atau tidak.

MD
sumber
1
Saya sedang mencari secara khusus jika koneksi aktif adalah wifi. Juga, tidak perlu melakukan pemeriksaan nol pada conMgr itu tidak akan pernah menjadi nol.
Nathan Schwermann
Bisakah Anda memeriksa pertanyaan ini ? :(
Skizo-ozᴉʞS
2

Ini bekerja untuk saya:

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

    // Mobile
    State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();

    // Wi-Fi
    State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();

    // And then use it like this:

    if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Mobile is Enabled :) ....",Toast.LENGTH_LONG).show();
    }
    else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Wifi is Enabled  :) ....",Toast.LENGTH_LONG).show();
    }
    else
    {
        Toast.makeText(Wifi_Gprs.this,"No Wifi or Gprs Enabled :( ....",Toast.LENGTH_LONG).show();
    }

Dan tambahkan izin ini:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Ahmad
sumber
2

Banyak jawaban menggunakan kode usang, atau kode yang tersedia di versi API yang lebih tinggi. Sekarang saya menggunakan sesuatu seperti ini

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if(connectivityManager != null) {
            for (Network net : connectivityManager.getAllNetworks()) {
                NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(net);
                if (nc != null && nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                        && nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET))
                    return true;
            }
        }
        return false;
Oleg Shevchenko
sumber
1

Inilah yang saya gunakan sebagai metode utilitas di aplikasi saya:

public static boolean isDeviceOnWifi(final Context context) {
        ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        return mWifi != null && mWifi.isConnectedOrConnecting();
}
Mahendra Liya
sumber
Adalah baik untuk menunjukkan bahwa metode isConnectedOrConnecting penting ketika Anda memeriksa untuk membuat koneksi. Metode IsConnected tidak berfungsi untuk saya.
vincent
1

Di Android versi baru

private void getWifiInfo(Context context) {
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    Network[] networks = connManager.getAllNetworks();

    if(networks == null || networks.length == 0)
        return;

    for( int i = 0; i < networks.length; i++) {
        Network ntk = networks[i];
        NetworkInfo ntkInfo = connManager.getNetworkInfo(ntk);
        if (ntkInfo.getType() == ConnectivityManager.TYPE_WIFI && ntkInfo.isConnected() ) {
            final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
            if (connectionInfo != null) {
                // add some code here
            }
        }

    }
}

dan menambahkan premisi juga

Albert Nguyen
sumber
connManager.getAllNetworks()membutuhkan API level 21.
Jawand Singh
1

Mirip dengan jawaban @Jason Knight, tetapi dengan cara Kotlin:

val connManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)

if (mWifi.isConnected) {
     // Do whatever
}
Jerry Chong
sumber
ConnectivityManager.TYPE_WIFIsudah ditinggalkan
Jérôme Pietri
0

Ini adalah solusi yang lebih mudah. Lihat pertanyaan Stack Overflow Memeriksa Wi-Fi diaktifkan atau tidak di Android .

PS Jangan lupa untuk menambahkan kode ke file manifes.xml untuk mengizinkan izin. Seperti yang ditunjukkan di bawah ini.

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
Clayden
sumber
0

Mencoba

wifiManager.getConnectionInfo().getIpAddress()

Ini mengembalikan 0 hingga perangkat memiliki koneksi yang dapat digunakan (pada mesin saya, Samsung SM-T280, Android 5.1.1).

Adrian
sumber
0

Anda dapat mengaktifkan WIFI jika tidak diaktifkan sebagai berikut: 1. periksa status WIFI seperti yang dijawab oleh @Jason Knight 2. jika tidak diaktifkan, aktifkan jangan lupa untuk menambahkan izin WIFI dalam file manifes

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

Kelas Java Anda harus seperti itu

public class TestApp extends Activity {
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //check WIFI activation
    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    if (mWifi.isConnected() == false) {
        showWIFIDisabledAlertToUser();
    }
    else {
        Toast.makeText(this, "WIFI is Enabled in your devide", Toast.LENGTH_SHORT).show();
    }
}


private void showWIFIDisabledAlertToUser(){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setMessage("WIFI is disabled in your device. Would you like to enable it?")
            .setCancelable(false)
            .setPositiveButton("Goto Settings Page To Enable WIFI",
                    new DialogInterface.OnClickListener(){
                        public void onClick(DialogInterface dialog, int id){
                            Intent callGPSSettingIntent = new Intent(
                                    Settings.ACTION_WIFI_SETTINGS);
                            startActivity(callGPSSettingIntent);
                        }
                    });
    alertDialogBuilder.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int id){
                    dialog.cancel();
                }
            });
    AlertDialog alert = alertDialogBuilder.create();
    alert.show();
}

}

Ahmed Belal
sumber
0

Tambahkan ini untuk JAWA:

public boolean CheckWifiConnection() {
        ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
        if (conMgr.getActiveNetworkInfo() != null
                && conMgr.getActiveNetworkInfo().isAvailable()
                && conMgr.getActiveNetworkInfo().isConnected()) {
            return true;
        } else {
            return false;
        }
    }

dalam file Manifest tambahkan izin berikut:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Sagittarius
sumber
0

Agak tua pertanyaan tapi ini yang saya gunakan. membutuhkan min api level 21 juga mempertimbangkan apotik Networkinfo yang sudah usang.

boolean isWifiConn = false;
    ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Network network = connMgr.getActiveNetwork();
        if (network == null) return false;
        NetworkCapabilities capabilities = connMgr.getNetworkCapabilities(network);
        if(capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)){
            isWifiConn = true;
            Toast.makeText(context,"Wifi connected Api >= "+Build.VERSION_CODES.M,Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(context,"Wifi not connected Api >= "+Build.VERSION_CODES.M,Toast.LENGTH_LONG).show();
        }
    } else {
        for (Network network : connMgr.getAllNetworks()) {
            NetworkInfo networkInfo = connMgr.getNetworkInfo(network);
            if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI && networkInfo.isConnected()) {
                isWifiConn = true;
                Toast.makeText(context,"Wifi connected ",Toast.LENGTH_LONG).show();
                break;
            }else{
                Toast.makeText(context,"Wifi not connected ",Toast.LENGTH_LONG).show();
            }
        }
    }
    return isWifiConn;
katwekibs
sumber