本博文为本人学习Android开发以来第一次实例编写。点击一个按钮,获取当前的wifi名称以及接受的信号强度。
目录
代码
首先创建一个工程文件命名为WifiTest
定义界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/wifi_rssi"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="WiFi RSSI"
android:textAllCaps="false"
/>
</LinearLayout>
mainactivity
package com.example.wifitest;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.util.List;
public class MainActivity extends AppCompatActivity {
String wifi_name;
int wifi_rssi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//定义按键实例
Button button1=(Button) findViewById(R.id.wifi_rssi);
//定义按钮点击事件
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//在此处定义获取WIFI的信号与名称,然后通过Toast显示出来
WifiManager wifiManager= (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);//获取wifi服务
assert wifiManager != null;
WifiInfo wifiInfo=wifiManager.getConnectionInfo();
wifi_name=wifiInfo.getSSID();
//华为手机解决
int networkID=wifiInfo.getNetworkId();
List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks();
for (WifiConfiguration wifiConfiguration:configuredNetworks){
if (wifiConfiguration.networkId==networkID){
wifi_name=wifiConfiguration.SSID;
break;
}
}
// //8.0之后,再这样获取,拿到的就是<unknown ssid>了
// ConnectivityManager ctm = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
// NetworkInfo networkInfo = ctm.getActiveNetworkInfo();
// String wifi_name = networkInfo.getExtraInfo();
wifi_rssi=wifiInfo.getRssi();
Log.d("wifiInfo", wifiInfo.toString());
Log.d("SSID",wifiInfo.getSSID());
//通过Toast输出
Toast.makeText(MainActivity.this, "rssi:"+wifi_rssi+"---wifiId:"+wifi_name,Toast.LENGTH_SHORT).show();
}
});
}
//***********定义一系列函数************
// //获取wifi的名称
// private String getConnectWifiSsid() {
// WifiManager wifiManager= (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);//获取wifi服务
// WifiInfo wifiInfo=wifiManager.getConnectionInfo();
// }
}
需要的权限
获取WIFI信息状态的权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
获取网络状态改变的权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.wifitest">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<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>
效果
参考资料