gpt4 book ai didi

android - 在 Oreo (8.1.0) 上没有获得正确的 Wifi SSID。它显示 尽管它已连接到具有 SSID 的 wifi

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:07:14 24 4
gpt4 key购买 nike

我需要在 android 上检查当前连接的 wifi SSID。我分别使用 Oreo 8.1.0 和 Oreo 8.0 检查了诺基亚 6 和 OnePlus 5。其他具有不同操作系统版本的手机可以正常使用此代码。我的代码有什么问题吗?

private WifiInfo wifiInfo;
private String ssid = "";
private WifiManager wifiManager;

private boolean getWifiStatus() {
wifiManager= (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiInfo = wifiManager.getConnectionInfo();
ssid = "";
ssid = wifiInfo.getSSID();
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isWiFi = false;
if(activeNetwork != null){
isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
}

Log.d(TAG, "getWifiStatus: " + ssid);
if(ssid.contains("TripleMZim") && wifiManager.isWifiEnabled() && isWiFi ){
return true;
}
else{
return false;
}
}

list 文件中的权限:

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

最佳答案

在android中获取WIFI信息(如SSID)有多种方式。

其中一些已在此处列出,例如 WifiManager服务。

但是对于 OP 问题:

Is there anything wrong with my code?

不,问题不在您的代码中。出现意外行为的主要原因是上一个 android 版本的安全补丁。

在补丁(或任何未获得更新的设备)之前,黑客可以窃取通过 wifi 信息泄露的敏感信息。

例如,黑客可以获得设备的地理位置,这应该只能通过 Dangerous Permission 访问LOCATION ,应该在运行时请求并且可以随时撤销。但另一方面 - WifiInfo只能通过 Normal Permission 访问android.permission.ACCESS_WIFI_STATE 在安装时授予且无法撤销。这样,黑客就可以绕过权限机制,仅使用普通权限访问危险权限的数据。

此问题已由 CVE-2018-9489 报告和跟踪,您可以在此处阅读更多相关信息:Sensitive information expose via WIFI

所以你遇到这些问题的原因是因为现在 android 阻止了敏感的 wifi 信息,除非应用程序拥有 ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION .

因此,如果您明确请求这些权限(并得到用户允许),您的代码应该可以正常工作。

例如:

list

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

Activity

private static final int LOCATION = 1;
protected void onStart() {
super.onStart();
//Assume you want to read the SSID when the activity is started
tryToReadSSID();
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if(grantResults[0] == PackageManager.PERMISSION_GRANTED && requestCode == LOCATION){
//User allowed the location and you can read it now
tryToReadSSID();
}
}

private void tryToReadSSID() {
//If requested permission isn't Granted yet
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
//Request permission from user
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION);
}else{//Permission already granted
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if(wifiInfo.getSupplicantState() == SupplicantState.COMPLETED){
String ssid = wifiInfo.getSSID();//Here you can access your SSID
System.out.println(ssid);
}
}
}

关于android - 在 Oreo (8.1.0) 上没有获得正确的 Wifi SSID。它显示 <unknown ssid> 尽管它已连接到具有 SSID 的 wifi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49977395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com