Android獲取WIFI 的ssid 方法適配Android9.0
阿新 • • 發佈:2018-11-11
Android獲取WIFI 的ssid 方法適配Android9.0
本文首次發表於:
蝸牛魔方-Android獲取WIFI SSID方法,適配9.0
demo 地址:JavaExtensionUtilsForAndroid
廢話不多說了直接上程式碼
首先在Androidmanifast 中新增許可權
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
## 獲取SSID 的方法如下 /** * 獲取SSID * @param activity 上下文 * @return WIFI 的SSID */ public String getWIFISSID(Activity activity) { String ssid="unknown id"; if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O||Build.VERSION.SDK_INT==Build.VERSION_CODES.P) { WifiManager mWifiManager = (WifiManager) activity.getApplicationContext().getSystemService(Context.WIFI_SERVICE); assert mWifiManager != null; WifiInfo info = mWifiManager.getConnectionInfo(); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { return info.getSSID(); } else { return info.getSSID().replace("\"", ""); } } else if (Build.VERSION.SDK_INT==Build.VERSION_CODES.O_MR1){ ConnectivityManager connManager = (ConnectivityManager) activity.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); assert connManager != null; NetworkInfo networkInfo = connManager.getActiveNetworkInfo(); if (networkInfo.isConnected()) { if (networkInfo.getExtraInfo()!=null){ return networkInfo.getExtraInfo().replace("\"",""); } } } return ssid; }
MainActivity方法。佈局檔案太簡單了 。不貼程式碼了
public class MainActivity extends AppCompatActivity { private PermissionHelper permissionHelper; TextView mTvSSID; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTvSSID = findViewById(R.id.tvSSID); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); permissionHelper = new PermissionHelper(this); getWifiSSid(); } private void getWifiSSid() { permissionHelper.check(Manifest.permission.ACCESS_FINE_LOCATION).onSuccess(this::onSuccess).onDenied(this::onDenied).onNeverAskAgain(this::onNeverAskAgain).run(); } private void onSuccess() { mTvSSID.setText(DeviceUtil.INSTANCE.getWIFISSID(this)); } private void onDenied() { ToastUtil.INSTANCE.show(this, "許可權被拒絕,9.0系統無法獲取SSID"); } private void onNeverAskAgain() { ToastUtil.INSTANCE.show(this, "許可權被拒絕,9.0系統無法獲取SSID,下次不會在詢問了"); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { permissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults); } }
Android8.1獲取方法
需要在Androidmanifast.xml檔案中新增如下許可權
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
ConnectivityManager connManager = (ConnectivityManager) activity.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
assert connManager != null;
NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
if (networkInfo.isConnected()) {
if (networkInfo.getExtraInfo()!=null){
return networkInfo.getExtraInfo().replace("\"","");
}
}
9.0 以後需要申請執行時許可權
在Androidmanifast.xml檔案中新增
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
許可權申請框架
在model 中的gradle中加入以下依賴。
implementation 'ru.alexbykov:nopermission:1.1.2'