63

In Permissions tab of Android Manifest, in the drop down there are options called android.permission.ACCESS_NETWORK_STATE and android.permission.ACCESS_WIFI_STATE. What is the difference between them? Is ACCESS_NETWORK_STATE more generalized than ACCESS_WIFI_STATE?

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
JDroid
  • 633
  • 1
  • 5
  • 5

3 Answers3

53

android.permission.ACCESS_NETWORK_STATE is needed for accessing ConnectivityManager (mainly for monitoring network connections in general), while android.permission.ACCESS_WIFI_STATE grants access to WifiManager (for managing all aspects of Wi-Fi connectivity in particular).

Flow
  • 23,572
  • 15
  • 99
  • 156
guido
  • 18,864
  • 6
  • 70
  • 95
  • 4
    So if I use ACCESS_NETWORK_STATE, and check connectivity: if on WiFi will it return online or offline? Do I need to check both? – shkschneider Sep 06 '12 at 16:08
  • 3
    See http://developer.android.com/training/basics/network-ops/managing.html for a useful function (isOnline) that tells whether there is an internet connection at all. – Kevin Whitefoot Dec 16 '14 at 21:14
  • ACCESS_NETWORK_STATE can be used to check the general network state (i.e. connecting, connected) even if it's Wifi by using the ConnectivityManager's `getActiveNetworkInfo()` method. – Ben Baron Oct 16 '18 at 15:44
5

ACCESS_NETWORK_STATE is required to check if you are connected to a network, it does not matter of what type it is (Wi-Fi, GPRS, UMTS, etc.).

ACCESS_WIFI_STATE is not required to prope for internet connections.

To answer most of the questions, yes you don’t need the ACCESS_WIFI_STATE if merely checking for connectivity.

Tom el Safadi
  • 6,164
  • 5
  • 49
  • 102
0

Network state refers to cellular network connectivity.

Wifi state refers to the state of the phone's Wifi connection.

Justin Niessner
  • 242,243
  • 40
  • 408
  • 536
  • 7
    Not exactly, see http://developer.android.com/training/basics/network-ops/managing.html where it uses 'network status' to refer to any internet connection regardless of type. It distinguishes between ConnectivityManager.TYPE_MOBILE and ConnectivityManager.TYPE_WIFI. It even gives example code for useful function (isOnline) that tells whether there is an internet connection at all. – Kevin Whitefoot Dec 16 '14 at 21:12