-
-
Save JosiasSena/100de74192ca3024da8494c1ca428294 to your computer and use it in GitHub Desktop.
| import android.content.BroadcastReceiver; | |
| import android.content.Context; | |
| import android.content.Intent; | |
| import android.content.IntentFilter; | |
| import android.net.wifi.WifiConfiguration; | |
| import android.net.wifi.WifiManager; | |
| import android.support.annotation.NonNull; | |
| import android.util.Log; | |
| import static android.content.ContentValues.TAG; | |
| /** | |
| * Listens for 3 broadcasted custom wifi actions: | |
| * <p> | |
| * - {@link #ACTION_WIFI_ON} - {@link #ACTION_WIFI_OFF} - {@link #ACTION_CONNECT_TO_WIFI} | |
| * <p> | |
| * These actions are custom and can be replaced with any other string. To test these custom actions | |
| * you can do the following | |
| * <p> | |
| * <code> | |
| * | |
| * adb shell am broadcast -a android.intent.action.WIFI_ON | |
| * | |
| * adb shell am broadcast -a android.intent.action.WIFI_OFF | |
| * | |
| * adb shell am broadcast -a android.intent.action.CONNECT_TO_WIFI -e ssid {ssid} -e password {pwd} | |
| * | |
| * </code> | |
| */ | |
| public class WifiConnectionReceiver extends BroadcastReceiver { | |
| /** | |
| * Notifies the receiver to turn wifi on | |
| */ | |
| private static final String ACTION_WIFI_ON = "android.intent.action.WIFI_ON"; | |
| /** | |
| * Notifies the receiver to turn wifi off | |
| */ | |
| private static final String ACTION_WIFI_OFF = "android.intent.action.WIFI_OFF"; | |
| /** | |
| * Notifies the receiver to connect to a specified wifi | |
| */ | |
| private static final String ACTION_CONNECT_TO_WIFI = "android.intent.action.CONNECT_TO_WIFI"; | |
| private WifiManager wifiManager; | |
| public WifiConnectionReceiver() { | |
| } | |
| public void onReceive(Context c, Intent intent) { | |
| Log.d(TAG, "onReceive() called with: intent = [" + intent + "]"); | |
| wifiManager = (WifiManager) c.getSystemService(Context.WIFI_SERVICE); | |
| final String action = intent.getAction(); | |
| if (!isTextNullOrEmpty(action)) { | |
| switch (action) { | |
| case ACTION_WIFI_ON: | |
| // Turns wifi on | |
| wifiManager.setWifiEnabled(true); | |
| break; | |
| case ACTION_WIFI_OFF: | |
| // Turns wifi off | |
| wifiManager.setWifiEnabled(false); | |
| break; | |
| case ACTION_CONNECT_TO_WIFI: | |
| // Connects to a specific wifi network | |
| final String networkSSID = intent.getStringExtra("ssid"); | |
| final String networkPassword = intent.getStringExtra("password"); | |
| if (!isTextNullOrEmpty(networkSSID) && !isTextNullOrEmpty(networkPassword)) { | |
| connectToWifi(networkSSID, networkPassword); | |
| } else { | |
| Log.e(TAG, "onReceive: cannot use " + ACTION_CONNECT_TO_WIFI + | |
| "without passing in a proper wifi SSID and password."); | |
| } | |
| break; | |
| } | |
| } | |
| } | |
| private boolean isTextNullOrEmpty(final String text) { | |
| return text != null && !text.isEmpty(); | |
| } | |
| /** | |
| * Connect to the specified wifi network. | |
| * | |
| * @param networkSSID - The wifi network SSID | |
| * @param networkPassword - the wifi password | |
| */ | |
| private void connectToWifi(final String networkSSID, final String networkPassword) { | |
| if (!wifiManager.isWifiEnabled()) { | |
| wifiManager.setWifiEnabled(true); | |
| } | |
| WifiConfiguration conf = new WifiConfiguration(); | |
| conf.SSID = String.format("\"%s\"", networkSSID); | |
| conf.preSharedKey = String.format("\"%s\"", networkPassword); | |
| int netId = wifiManager.addNetwork(conf); | |
| wifiManager.disconnect(); | |
| wifiManager.enableNetwork(netId, true); | |
| wifiManager.reconnect(); | |
| } | |
| @NonNull | |
| public static IntentFilter getIntentFilterForWifiConnectionReceiver() { | |
| final IntentFilter randomIntentFilter = new IntentFilter(ACTION_WIFI_ON); | |
| randomIntentFilter.addAction(ACTION_WIFI_OFF); | |
| randomIntentFilter.addAction(ACTION_CONNECT_TO_WIFI); | |
| return randomIntentFilter; | |
| } | |
| } |
1)Adicione como variável da activity;
private WifiConnectionReceiver mWifiConnectionReceiver;
2)se registrar no oncreate() precisa destruir no onDestroy(), onCreate(){
registerReceiver(mWifiScanReceiver, new IntentFilter(getIntentFilterForWifiConnectionReceiver());
}
onDestroy(){
unregisterReceiver(mWifiScanReceiver);
super.onDestrou();
}
3) se registrar no onStart()
destrua no onPause()
Semelhante ao código acima
When you do connect to a Network, do you get a prompt in the notification bar ? Or do you directly connect to the WiFi from within the app?
I am seeing a notification saying "WiFi options available" and then clicking on takes me to the WiFi Settings..I would like this process to work directly within the app...any clue?
@Akshshr No, after android 8 version, you need to ask the user to choose the wifi (security)
Como eu utilizo essa classe em minha activity? Sou iniciante e tenho essa dúvida em como chamá-la.