-
-
Save cp-radhika-s/74d2eb717bad62f39d28a8727708af9c to your computer and use it in GitHub Desktop.
public class MainActivity extends AppCompatActivity implements WifiChangeBroadcastReceiver.WifiChangeBroadcastListener { | |
private WifiManager wifiManager; | |
private ConnectivityManager connectivityManager; | |
private WifiChangeBroadcastReceiver wifiStateChangeReceiver; | |
@Override | |
protected void onCreate(@Nullable Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); | |
connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); | |
} | |
@Override | |
protected void onStart() { | |
super.onStart(); | |
wifiStateChangeReceiver = new WifiChangeBroadcastReceiver(this); | |
registerReceiver(wifiStateChangeReceiver, | |
new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION)); | |
connectToAp(); | |
} | |
@Override | |
protected void onStop() { | |
super.onStop(); | |
unregisterReceiver(wifiStateChangeReceiver); | |
} | |
public static WifiConfiguration buildWifiConfig() { | |
WifiConfiguration config = new WifiConfiguration(); | |
config.SSID = "\"networkSSID\""; | |
config.wepKeys[0] = "\"networkPassword\""; | |
// have to set a very high number in order to ensure that | |
// Android doesn't immediately drop this connection and reconnect to //the a different AP. | |
config.priority = 999999; | |
return config; | |
} | |
public void connectToAp() { | |
WifiConfiguration wifiConfig = buildWifiConfig(); | |
String targetNetworkSSID = wifiConfig.SSID; | |
//Check we already connected to specific wifi | |
WifiInfo currentConnectionInfo = wifiManager.getConnectionInfo(); | |
if (currentConnectionInfo.getSSID().equals(targetNetworkSSID)) { | |
// we're already connected to this AP, nothing to do. | |
} else { | |
//If network is configured we can obtain the network ID from the WifiConfiguration object. | |
int networkId = getIdForConfiguredNetwork("networkSSID"); | |
if (networkId == -1) { | |
// Add network to configured network list. | |
networkId = wifiManager.addNetwork(wifiConfig); | |
} | |
// after enableNetwork call we will receive network broadcast. | |
wifiManager.enableNetwork(networkId, true); | |
} | |
} | |
@Override | |
public void onWifiChangeBroadcastReceived(Context context, Intent intent) { | |
WifiConfiguration wifiConfig = buildWifiConfig(); | |
WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO); | |
if (wifiInfo == null || wifiInfo.getSSID() == null) { | |
// no WifiInfo or SSID means we're not interested. | |
return; | |
} | |
String newlyConnectedSSID = wifiInfo.getSSID(); | |
if (newlyConnectedSSID.equals(wifiConfig.SSID)) { | |
bindProcessToNetwork(); | |
} | |
} | |
public int getIdForConfiguredNetwork(String ssid) { | |
List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks(); | |
for (WifiConfiguration configNetwork : configuredNetworks) { | |
if (configNetwork.SSID.equals(ssid)) { | |
return configNetwork.networkId; | |
} | |
} | |
return -1; | |
} | |
public void bindProcessToNetwork() { | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | |
Network network = getNetworkObjectForCurrentWifiConnection(); | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | |
connectivityManager.bindProcessToNetwork(network); | |
} else { | |
ConnectivityManager.setProcessDefaultNetwork(network); | |
} | |
} | |
} | |
@Nullable | |
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) | |
public Network getNetworkObjectForCurrentWifiConnection() { | |
List<Network> networks = Arrays.asList(connectivityManager.getAllNetworks()); | |
for (Network network : networks) { | |
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network); | |
if (capabilities.hasTransport | |
(NetworkCapabilities.TRANSPORT_WIFI)) { | |
return network; | |
} | |
} | |
return null; | |
} | |
} |
public class WifiChangeBroadcastReceiver extends BroadcastReceiver { | |
private final WifiChangeBroadcastListener listener; | |
public WifiChangeBroadcastReceiver(WifiChangeBroadcastListener listener) { | |
this.listener = listener; | |
} | |
@Override | |
public void onReceive(Context context, Intent intent) { | |
listener.onWifiChangeBroadcastReceived(context, intent); | |
} | |
public interface WifiChangeBroadcastListener { | |
void onWifiChangeBroadcastReceived(Context context, Intent intent); | |
} | |
} |
Android 10 (API level 29) and higher:
A successful call to WifiManager.startScan() requires all of the following conditions to be met:
If your app is targeting Android 10 (API level 29) SDK or higher, your app has the ACCESS_FINE_LOCATION permission.
If your app is targeting SDK lower than Android 10 (API level 29), your app has the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission.
Your app has the CHANGE_WIFI_STATE permission.
Location services are enabled on the device (under Settings > Location).
To successfully call WifiManager.getScanResults(), ensure all of the following conditions are met:
If your app is targeting Android 10 (API level 29) SDK or higher, your app has the ACCESS_FINE_LOCATION permission.
If your app is targeting SDK lower than Android 10 (API level 29), your app has the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission.
Your app has the ACCESS_WIFI_STATE permission.
Location services are enabled on the device (under Settings > Location).
If the calling app doesn't meet all of these requirements, the call fails with a SecurityException.
I use android 10, but it not working. Can you help?