Tested on Samsung Galaxy A9, running Android 6.0.1.
Wifi enabled and connected |
Wifi disabled |
MainActivity.java
package com.blogspot.android_er.androidwireless;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.format.Formatter;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView tvWifiEnabled, tvWifiState, tvWifiInfo, tvSSID,
tvRssi, tvIP, tvFormattedIP1, tvFormattedIP2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvWifiEnabled = (TextView)findViewById(R.id.WifiEnabled);
tvWifiState = (TextView)findViewById(R.id.WifiState);
tvWifiInfo = (TextView)findViewById(R.id.WifiInfo);
tvSSID = (TextView)findViewById(R.id.SSID);
tvRssi = (TextView)findViewById(R.id.Rssi);
tvIP = (TextView)findViewById(R.id.IP);
tvFormattedIP1 = (TextView)findViewById(R.id.FormattedIP1);
tvFormattedIP2 = (TextView)findViewById(R.id.FormattedIP2);
//To prevent memory leaks on devices prior to Android N,
//retrieve WifiManager with
//getApplicationContext().getSystemService(Context.WIFI_SERVICE),
//instead of getSystemService(Context.WIFI_SERVICE)
WifiManager wifiManager =
(WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
tvWifiEnabled.setText("isWifiEnabled(): " + wifiManager.isWifiEnabled());
tvWifiState.setText(readtvWifiState(wifiManager));
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if(wifiInfo == null){
tvWifiInfo.setText("wifiInfo == null !!!");
}else{
tvWifiInfo.setText(wifiInfo.toString());
tvSSID.setText("SSID: " + wifiInfo.getSSID());
tvRssi.setText("Rssi: " + wifiInfo.getRssi() + " dBm");
int ipAddress = wifiInfo.getIpAddress();
/*
Formatter.formatIpAddress() was deprecated in API level 12.
This method does not support IPv6 addresses.
*/
String FormatedIpAddress = Formatter.formatIpAddress(ipAddress);
String FormatedIpAddress2 = String.format("%d.%d.%d.%d",
(ipAddress & 0xff),
(ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff),
(ipAddress >> 24 & 0xff));
tvIP.setText("IP: " + wifiInfo.getIpAddress());
tvFormattedIP1.setText("" + FormatedIpAddress);
tvFormattedIP2.setText("" + FormatedIpAddress2);
}
}
// "android.permission.ACCESS_WIFI_STATE" is needed
private String readtvWifiState(WifiManager wm){
String result = "";
switch (wm.getWifiState()){
case WifiManager.WIFI_STATE_DISABLED:
result = "WIFI_STATE_DISABLED";
break;
case WifiManager.WIFI_STATE_DISABLING:
result = "WIFI_STATE_DISABLING";
break;
case WifiManager.WIFI_STATE_ENABLED:
result = "WIFI_STATE_ENABLED";
break;
case WifiManager.WIFI_STATE_ENABLING:
result = "WIFI_STATE_ENABLING";
break;
case WifiManager.WIFI_STATE_UNKNOWN:
result = "WIFI_STATE_UNKNOWN";
break;
default:
}
return result;
}
}
layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.blogspot.android_er.androidwireless.MainActivity" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:autoLink="web"
android:text="http://android-er.blogspot.com/"
android:textStyle="bold" />
<TextView
android:id="@+id/WifiEnabled"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/WifiState"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/WifiInfo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="italic"/>
<TextView
android:id="@+id/SSID"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="#FF0000"/>
<TextView
android:id="@+id/Rssi"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#00FF00"/>
<TextView
android:id="@+id/comment1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="get IP Address:"/>
<TextView
android:id="@+id/IP"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="italic"
android:textColor="#0000FF"/>
<TextView
android:id="@+id/FormattedIP1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="italic"
android:textColor="#0000FF"/>
<TextView
android:id="@+id/FormattedIP2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="italic"
android:textColor="#0000FF"/>
</LinearLayout>
uses-permission of "android.permission.ACCESS_WIFI_STATE" is needed in AndroidManifest.xml.
Remark on MAC:
Please take a look on the captured screen; the MAC address is 02:00:00:00:00:00.
Refer to Android 6.0 Changes - Access to Hardware Identifier:
To provide users with greater data protection, starting in this release, Android removes programmatic access to the device’s local hardware identifier for apps using the Wi-Fi and Bluetooth APIs. The WifiInfo.getMacAddress() and the BluetoothAdapter.getAddress() methods now return a constant value of 02:00:00:00:00:00.
Thanks for sharing the code!
ReplyDeleteThank you very much for sharing this code, Congratulations!
ReplyDelete