如何在android(java)中以编程方式在异步任务中等待wifi连接(接入点)?
我正在用android studio制作一个android应用程序。 我的想法是用wifi连接到我的设备(接入点),我以后可能不需要扫描,我只想通过编程连接它。 而且确实如此!!!工作强> 但是我想在接入点不可用时执行一些代码,而且重要的是我想在我的android手机连接到接入点时执行一些代码 问题:如何检查异步任务中wifi的状态是否已更改 这是我使用的代码:如何在android(java)中以编程方式在异步任务中等待wifi连接(接入点)?,java,android,Java,Android,我正在用android studio制作一个android应用程序。 我的想法是用wifi连接到我的设备(接入点),我以后可能不需要扫描,我只想通过编程连接它。 而且确实如此!!!工作 但是我想在接入点不可用时执行一些代码,而且重要的是我想在我的android手机连接到接入点时执行一些代码 问题:如何检查异步任务中wifi的状态是否已更改 这是我使用的代码: @Override public View onCreateView(LayoutInflater inflater,
@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;
}
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\U设置,
货柜(虚假);;
button=(button)view.findViewById(R.id.add\u device\u按钮);
WifiTask WifiTask=新WifiTask();
wifiTask.execute();
返回视图;
}
公共类WifiTask扩展异步任务{
@凌驾
受保护的void onPostExecute(启用布尔wifi_){
super.onPostExecute(启用wifi_);
如果(wifi_已启用!=真){
按钮。设置启用(错误);
Toast.makeText(getContext(),“启用Wifi”,Toast.LENGTH_SHORT.show();
}
如果(wifi_已启用==真){
按钮。setEnabled(真);
}
}
@凌驾
受保护的布尔doInBackground(布尔…布尔){
WifiManager WifiManager=(WifiManager)getActivity().getApplicationContext().getSystemService(Context.WIFI_服务);
布尔值is_wifi_enabled=wifiManager.isWifiEnabled();
Log.i(“调试”,是否已启用wifi。toString()+“已启用wifi”);
如果(是否启用无线网络==错误)
{
wifiManager.setWifiEnabled(true);
是否已启用wifi=wifiManager.isWifiEnabled();
}
返回已启用wifi;
}
}
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);
您可以注册BroadcastReceiver,以便在WiFi连接更改时收到通知。如果您需要,我可以给您代码示例?谢谢您的回复。问题是接入点没有互联网连接。这是一个esp8266节点MCU板,在接入点模式下运行。它还能用吗?我理解处理程序,但我不能检查互联网,对吗?因为我知道这是一个没有互联网连接的接入点。或者这仍然有效?简单地说,使用实例将您的操作保存到已连接的。当您的实例不为null时,请签入oncreate或onresume,如果您的实例不为null,请在建立wifi连接或正确断开连接时自动运行runnable to connected wifiBrodvastreceiver呼叫,非常感谢