我尝试使用ConnectivityManager.NetworkCallback
,如下所示。我不需要使用Broadcastreceivers
,只需要使用ConnectivityManager.NetworkCallback
。但我想拿连接的wifi SSID
,我做了如下。
package com.example.myapplication;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkRequest;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
ConnectivityManager connectivityManager;
ConnectivityManager.NetworkCallback networkCallback;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest networkRequest = new NetworkRequest.Builder().build();
networkCallback = new ConnectivityManager.NetworkCallback(){
@Override
public void onAvailable(Network network) {
Toast.makeText(getApplicationContext(), "*******onAvailable**********", Toast.LENGTH_LONG).show();
WifiManager wifiManager;
String connectedSsid = null;
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
connectedSsid = info.getSSID();
if (connectedSsid != null) {
Toast.makeText(getApplicationContext(), "*******" + connectedSsid + "**********", Toast.LENGTH_LONG).show();
}
}
};
connectivityManager.registerNetworkCallback(networkRequest,networkCallback);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onStop(){
super.onStop();
connectivityManager.unregisterNetworkCallback(networkCallback);
}
}
我在AndroidManifest.xml
中添加了以下权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
onStop
方法中的onCreate
connectivityManager.unregisterNetworkCallback(networkCallback);
中的connectivityManager.registerNetworkCallback(networkRequest,networkCallback);
。-I使用@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
。但是,我想为Android 9
激活这个任务(这对它兼容吗?)因此,在onAvailable
方法中,我这样做了(您可以在上面看到我的完整代码)。
WifiManager wifiManager;
String connectedSsid = null;
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
connectedSsid = info.getSSID();
if (connectedSsid != null) {
Toast.makeText(getApplicationContext(), "*******" + connectedSsid + "**********", Toast.LENGTH_LONG).show();
}
那么,我如何使用仅使用ConnectivityManager.NetworkCallback
的连接wifi SSID
发布于 2019-12-19 06:29:35
您只需要检查WifiManager.getConfiguredNetworks()
并使用WifiInfo.getNetworkId()
查找具有特定网络id的配置。
例如,
在具有动作的广播接收器中,WifiManager.NETWORK_STATE_CHANGED_ACTION
-从意图中检索当前连接状态
intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
NetworkInfo nwInfo =
nwInfo.getState()
如果NetworkInfo.getState
等于NetworkInfo.State.CONNECTED
,那么我可以得到当前的WifiInfo对象
WifiManager wifiManager = (WifiManager) getSystemService (Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
然后,
public String findSSIDForWifiInfo(WifiManager manager, WifiInfo wifiInfo) {
List<WifiConfiguration> listOfConfigurations = manager.getConfiguredNetworks();
for (int index = 0; index < listOfConfigurations.size(); index++) {
WifiConfiguration configuration = listOfConfigurations.get(index);
if (configuration.networkId == wifiInfo.getNetworkId()) {
return configuration.SSID;
}
}
return null;
}
注意:此方法不需要位置或位置权限。
https://stackoverflow.com/questions/59404134
复制相似问题