Создание Hot Spot программно на Android версии Nougat - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю над приложением, в котором пользователь создает Hot Spot по нажатию кнопки из приложения.Я проверил, что мой код отлично работает на версиях Android below 7.1(Nougat), но когда я тестировал свой код на версии Android 7.1(Nougat), он создает горячую точку, но не позволяет подключиться из-за preSharedKey.Это мой код для регистрации широковещательного приемника для настройки Wi-Fi

 WifiMgr.getInstance(ReceiverActivity.this).disableWifi();
    if(ApMgr.isApOn(ReceiverActivity.this)){
        ApMgr.disableAp(ReceiverActivity.this);
    }

    mWifiAPBroadcastReceiver = new WifiAPBroadcastReceiver() {
        @Override
        public void onWifiApEnabled() {
            if(!mIsInitialized){
                mIsInitialized = true;
                tvHotSpotDetails.setText(getResources().getString(R.string.tip_now_init_is_finish));
                tvHotSpotDetails.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        tvHotSpotDetails.setText(getResources().getString(R.string.tip_is_waitting_connect));
                    }
                }, 2*1000);
            }
        }
    };
    IntentFilter filter = new IntentFilter(WifiAPBroadcastReceiver.ACTION_WIFI_AP_STATE_CHANGED);
    registerReceiver(mWifiAPBroadcastReceiver, filter);
    ApMgr.isApOn(ReceiverActivity.this); // check Ap state :boolean
    String ssid = TextUtils.isNullOrBlank(Build.MODEL) ? FileUtils.DEFAULT_SSID : android.os.Build.MODEL;
    ApMgr.configApState(ReceiverActivity.this, ssid); 

Это код для настройки состояния Wi-Fi

public static boolean configApState(Context context, String apName) {
    WifiManager wifimanager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
    WifiConfiguration wificonfiguration = null;
    try {
        wificonfiguration = new WifiConfiguration();
        wificonfiguration.SSID = apName;
        // if WiFi is on, turn it off
        if(isApOn(context)) {
            wifimanager.setWifiEnabled(false);
            // if ap is on and then disable ap
            disableAp(context);
        }
        Method method = wifimanager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
        method.invoke(wifimanager, wificonfiguration, !isApOn(context));
        return true;
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

Broadcast Receiver

public abstract class WifiAPBroadcastReceiver extends BroadcastReceiver {

public static final String TAG = WifiAPBroadcastReceiver.class.getSimpleName();
//WIFI AP state action
public static final String ACTION_WIFI_AP_STATE_CHANGED = "android.net.wifi.WIFI_AP_STATE_CHANGED";


@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if(action.equals(ACTION_WIFI_AP_STATE_CHANGED)){ //Wifi AP state changed
        // get Wi-Fi Hotspot state here
        int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
        Log.i(TAG, "Wifi Ap state--->>>" + state);
        if (WifiManager.WIFI_STATE_ENABLED == state % 10) {
            // Wifi is enabled
            onWifiApEnabled();
        }else if(WifiManager.WIFI_STATE_ENABLING == state % 10){
            // Wifi is enabling
        }else if(WifiManager.WIFI_STATE_DISABLED == state % 10){
            // Wifi is disable
        }else if(WifiManager.WIFI_STATE_DISABLING == state % 10){
            // Wifi is disabling
        }
    }
}


public abstract void onWifiApEnabled();
}
...