Zim*_*Zim 10 android ssid wifi android-8.0-oreo
我需要检查android上当前连接的wifi SSID.我分别用诺基亚6和OnePlus 5检查了Oreo 8.1.0和Oreo 8.0.其他具有不同操作系统版本的手机正常使用此代码.我的代码有什么问题吗?
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;
}
}
Run Code Online (Sandbox Code Playgroud)
清单文件中的权限:
<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"/>
Run Code Online (Sandbox Code Playgroud)
Nik*_*tin 14
如何在android中获取WIFI信息(如SSID)有不同的方法.
其中一些已在上面列出,例如WifiManager服务.
但对于OP问题:
我的代码有什么问题吗?
不,问题不在您的代码中. 出现意外行为的主要原因是因为上一次安卓发布的安全补丁.
在修补程序(或任何未获得更新的设备)之前,黑客可以窃取通过wifi信息泄露的敏感信息.
例如,黑客可以获得设备地理位置,该地理位置应该只能通过危险许可 位置访问,该位置应该在运行时请求并且可以随时撤销.但另一方面 - WifiInfo只能在安装时授予的普通权限 才能访问,android.permission.ACCESS_WIFI_STATE并且无法撤销.这样,黑客可以完全绕过权限机制,并仅使用正常权限从危险权限访问数据.
该问题已被报告和跟踪CVE-2018-9489,您可以在此处阅读更多相关信息:通过WIFI公开敏感信息
所以你有这些问题的原因是因为现在android阻止敏感的wifi信息,除非应用程序持有ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION.
因此,如果您明确地(并且允许用户)请求这些权限,您的代码应该可以正常工作.
例如:
表现
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Run Code Online (Sandbox Code Playgroud)
活动
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Android Oreo中,你可以ConnectivityManager用来了解你的wifi SSID.
允许
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Run Code Online (Sandbox Code Playgroud)
获取SSID的代码
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
String ssid = info.getExtraInfo();
Log.d(TAG, "WiFi SSID: " + ssid);
}
Run Code Online (Sandbox Code Playgroud)
这是在Android Oreo 8.1.0中测试的.您将获得带有双引号的SSID.
| 归档时间: |
|
| 查看次数: |
12301 次 |
| 最近记录: |