Android Studio API 33 获取当前连接的WIFI名称

      • 常规流程
      • 失败流程

常规流程

以下内容在 API 33 成功实现,低版本API还请自行尝试(仅推荐 API 29 - 33 用户食用)

  1. 先(至少)添加以下权限到你的 AndroidManifest.xml 文件
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  1. 在需要使用的Activity类中,添加以下代码:
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;

public class MainActivity extends AppCompatActivity {
    // ...

    private void getCurrentSsid() {
        WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        if (wifiInfo != null) {
            String ssid  = wifiInfo.getSSID();
            // Remove quotes if present
            if (ssid.startsWith("\"") && ssid.endsWith("\"")) {
                ssid = ssid.substring(1, ssid.length() - 1);
            }
            Log.d("Current SSID: ", ssid);  // 可以用sout替换hh
        }
    }

    // ...
}
  1. 从 Android 10 (API 29)开始,需要确保 已经获取了定位权限
    requestPermissions() 函数会请求所需的定位权限,如果已经获取到这些权限,那么它会直接调用getCurrentSsid()函数获取当前连接的WiFi网络的名称,否则,它会请求这些权限。当用户做出是否允许这些权限请求的决定后,系统会调用onRequestPermissionsResult()函数,这个函数会检查请求的结果,如果用户已经同意了请求,那么它会再次调用函数获取当前连接的WiFi网络的名称。(当然,你可以修改这个函数为 仅仅获取定位权限)
import android.Manifest;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

public class MainActivity extends AppCompatActivity {
    // ...
    private static final int PERMISSIONS_REQUEST_CODE = 123;

    private void requestPermissions() {
        String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION, 
                                Manifest.permission.ACCESS_COARSE_LOCATION};
        if (ContextCompat.checkSelfPermission(this.getApplicationContext(),
                                              Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {
            getCurrentSsid();
        } else {
            ActivityCompat.requestPermissions(this, permissions, PERMISSIONS_REQUEST_CODE);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSIONS_REQUEST_CODE: {
                if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    getCurrentSsid();
                }
                return;
            }
        }
    }
}
  1. 在适当的地方(例如在onCreate()函数中)调用requestPermissions()函数,之后就可以调用getCurrentSsid()获取 SSID 了(亲测有用)

失败流程

如果失败了,请考虑以下情况:

  • 你有没有打开 手机WIFI 啊啊啊!!!
  • 需要 ACCESS_WIFI_STATE 等权限
  • 对于 Android 10 及以上版本,需要 ACCESS_FINE_LOCATION 权限
  • 对于后台应用,在 Android 10 及以上版本中,无法获取 SSID
  • 用户的位置设置应打开

检查过了还是不行就另寻其他方法吧 QwQ

你可能感兴趣的:(Android,android,studio,android,ide,wifi)