Я делаю приложение для Android с Android Studio. Идея состоит в том, чтобы подключиться к моему устройству (точке доступа) с помощью Wi-Fi, мне не нужно сканировать, возможно, в будущем, я просто хотел подключиться к нему программно. И оно делает!!! Работа!! Но я хотел выполнить некоторый код, когда точка доступа не доступна, а также важной частью этого является то, что я хотел выполнить некоторый код, когда мой телефон Android ЯВЛЯЕТСЯ подключался к точке доступа.
Вопрос: Как проверить, изменилось ли состояние вайфая в асинхронной задаче?
Это код, который я использовал:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_settings,
container, false);
button = (Button) view.findViewById(R.id.add_device_button);
WifiTask wifiTask = new WifiTask();
wifiTask.execute();
return view;
}
public class WifiTask extends AsyncTask<Boolean,Void,Boolean> {
@Override
protected void onPostExecute(Boolean wifi_enabled) {
super.onPostExecute(wifi_enabled);
if (wifi_enabled != true){
button.setEnabled(false);
Toast.makeText(getContext(),"Enabling Wifi", Toast.LENGTH_SHORT).show();
}
if ( wifi_enabled == true) {
button.setEnabled(true);
}
}
@Override
protected Boolean doInBackground(Boolean... booleans) {
WifiManager wifiManager = (WifiManager)getActivity().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
Boolean is_wifi_enabled = wifiManager.isWifiEnabled();
Log.i("debug", is_wifi_enabled.toString() + " wifi is enabled");
if (is_wifi_enabled == false)
{
wifiManager.setWifiEnabled(true);
is_wifi_enabled = wifiManager.isWifiEnabled();
}
return is_wifi_enabled;
}
}




для проверки интернета >>>>
private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//enter code here
return cm.getActiveNetworkInfo() != null;
}
за опоздание>>>
handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
tv.append("Hello World");
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(r, 1000);
Спасибо за ответ. Проблема в том, что точка доступа не подключена к интернету. Это плата nodemcu esp8266, работающая в режиме точки доступа. Будет ли это работать?
Я понимаю обработчик, но я не могу проверить интернет, верно? Потому что я это точка доступа без подключения к интернету. Или это все еще работает?
просто, используя instance, чтобы сохранить ваше действие в Connected. проверьте oncreate или onresume, когда ваш экземпляр не является нулевым, если ваш экземпляр не является нулевым, запуская ваш runnable на подключенный Wi-Fi
Вы можете зарегистрировать BroadcastReceiver, чтобы получать уведомления при изменении соединения WiFi. если вы хотите, я могу дать вам образец кода?
Brodvastreceiver автоматически звонит при установлении или отключении Wi-Fi соединения
Хорошо спасибо большое