Я работаю над приложением, в котором пользователь создает 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();
}