wifi自动连接,断开连接,打开和关闭,亲测有效
step1: 导入依赖 D:workspaceWifiTwoappuild.gradle
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
//wifi
implementation 'com.thanosfisherman.wifiutils:wifiutils:1.6.4'
implementation 'com.thanosfisherman.elvis:elvis:3.0'
step2:清单文件 D:workspaceWifiTwoappsrcmainAndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
step3: 布局 D:workspaceWifiTwoappsrcmain eslayoutactivity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_open"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="打开" />
<Button
android:id="@+id/btn_close"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="关闭" />
<Button
android:id="@+id/btn_scan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="扫描wifi" />
<Button
android:id="@+id/btn_wifiConnect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="新方法连接wifi" />
<Button
android:id="@+id/btn_cancelWifiConnect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="取消正在连接的wifi" />
<Button
android:id="@+id/btn_wpsWifiConnect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="WPS连接wifi(有bug)" />
<Button
android:id="@+id/btn_disConnectWifiConnect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="断开连接wifi" />
<Button
android:id="@+id/btn_disConnectDeleteWifiConnect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="不保存且断开连接wifi" />
</LinearLayout>
step4: 调用 D:workspaceWifiTwoappsrcmainjavacomexamplewifitwoMainActivity.java
package com.example.wifitwo;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.thanosfisherman.wifiutils.WifiUtils;
public class MainActivity extends AppCompatActivity {
// url: https://github.com/ThanosFisherman/WifiUtils.git
String wifiName1 = "mindor-AP-2019-07-03";
String wifiPassword1 = "123456789";
String wifiName2 = "DESKTOP-3PNAKUO 7694";
String wifiPassword2 = "9783V&h3";
String wifiName3 = "wanye_2021";
String wifiPassword3 = "123456789";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 555);
return;
}
Button btn_open = findViewById(R.id.btn_open);
Button btn_close = findViewById(R.id.btn_close);
Button btn_scan = findViewById(R.id.btn_scan);
Button btn_wifiConnect = findViewById(R.id.btn_wifiConnect);
Button btn_cancelWifiConnect = findViewById(R.id.btn_cancelWifiConnect);
Button btn_wpsWifiConnect = findViewById(R.id.btn_wpsWifiConnect);
Button btn_disConnectWifiConnect = findViewById(R.id.btn_disConnectWifiConnect);
Button btn_disConnectDeleteWifiConnect = findViewById(R.id.btn_disConnectDeleteWifiConnect);
btn_open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ConnectionManager(MainActivity.this).openWithWAP();
}
});
btn_close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ConnectionManager(MainActivity.this).closeWithWAP();
}
});
btn_scan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ConnectionManager(MainActivity.this).scanWithWAP();
}
});
btn_wifiConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ConnectionManager(MainActivity.this).connectWifiWithWAP(wifiName3,wifiPassword3);
}
});
btn_cancelWifiConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ConnectionManager(MainActivity.this).connectWifiWithWAP(wifiName3,wifiPassword3);
}
});
btn_wpsWifiConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//这个bssid是扫描扫出来的,跟ssid对应 ,ssid其实就是wifi名称
new ConnectionManager(MainActivity.this).wpsConnectWithWAP("54:a7:03:dd:9e:96",wifiPassword3);
}
});
btn_disConnectWifiConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ConnectionManager(MainActivity.this).disConnectWithWAP();
}
});
btn_disConnectDeleteWifiConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ConnectionManager(MainActivity.this).disConnectDeleteWithWAP(wifiName3);
}
});
}
}
step5: wifi管理类
package com.example.wifitwo;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.thanosfisherman.wifiutils.WifiConnectorBuilder;
import com.thanosfisherman.wifiutils.WifiUtils;
import com.thanosfisherman.wifiutils.wifiConnect.ConnectionErrorCode;
import com.thanosfisherman.wifiutils.wifiConnect.ConnectionSuccessListener;
import com.thanosfisherman.wifiutils.wifiDisconnect.DisconnectionErrorCode;
import com.thanosfisherman.wifiutils.wifiDisconnect.DisconnectionSuccessListener;
import com.thanosfisherman.wifiutils.wifiRemove.RemoveErrorCode;
import com.thanosfisherman.wifiutils.wifiRemove.RemoveSuccessListener;
import com.thanosfisherman.wifiutils.wifiWps.ConnectionWpsListener;
import java.util.List;
public class ConnectionManager {
Context context;
public ConnectionManager(Context context) {
this.context = context;
}
//打开wifi
public void openWithWAP() {
WifiUtils.withContext(context).enableWifi(this::checkResult);
}
//关闭wifi
public void closeWithWAP() {
WifiUtils.withContext(context).disableWifi();
}
//扫描wifi
public void scanWithWAP() {
WifiUtils.withContext(context).scanWifi(this::getScanResults).start();
}
//连接wifi
public void connectWifiWithWAP(String name, String password) {
WifiUtils.withContext(context)
.connectWith(name, password)
.setTimeout(10000)
.onConnectionResult(new ConnectionSuccessListener() {
@Override
public void success() {
Toast.makeText(context, "SUCCESS!", Toast.LENGTH_SHORT).show();
}
@Override
public void failed(@NonNull ConnectionErrorCode errorCode) {
Toast.makeText(context, "EPIC FAIL!" + errorCode.toString(), Toast.LENGTH_SHORT).show();
}
})
.start();
}
//取消正在连接的wifi
public void cancelConnectWithWAP(String name, String password) {
WifiConnectorBuilder.WifiUtilsBuilder builder = WifiUtils.withContext(context);
builder.connectWith(name, password)
.onConnectionResult(new ConnectionSuccessListener() {
@Override
public void success() {
Toast.makeText(context, "取消 SUCCESS!", Toast.LENGTH_SHORT).show();
}
@Override
public void failed(@NonNull ConnectionErrorCode errorCode) {
Toast.makeText(context, "EPIC FAIL!" + errorCode.toString(), Toast.LENGTH_SHORT).show();
}
})
.start();
builder.cancelAutoConnect();
}
//wps连接wifi
public void wpsConnectWithWAP(String name, String password) {
WifiUtils.withContext(context)
.connectWithWps(name, password)
.onConnectionWpsResult(new ConnectionWpsListener() {
@Override
public void isSuccessful(boolean isSuccess) {
Toast.makeText(context, "" + isSuccess, Toast.LENGTH_SHORT).show();
}
})
.start();
}
//断开wifi
public void disConnectWithWAP() {
WifiUtils.withContext(context)
.disconnect(new DisconnectionSuccessListener() {
@Override
public void success() {
Toast.makeText(context, "Disconnect success!", Toast.LENGTH_SHORT).show();
}
@Override
public void failed(@NonNull DisconnectionErrorCode errorCode) {
Toast.makeText(context, "Failed to disconnect: " + errorCode.toString(), Toast.LENGTH_SHORT).show();
}
});
}
//断开连接并删除保存的网络配置 wifi
public void disConnectDeleteWithWAP(String nameSsid) {
WifiUtils.withContext(context)
.remove(nameSsid, new RemoveSuccessListener() {
@Override
public void success() {
Toast.makeText(context, "Remove success!", Toast.LENGTH_SHORT).show();
}
@Override
public void failed(@NonNull RemoveErrorCode errorCode) {
Toast.makeText(context, "Failed to disconnect and remove: $errorCode", Toast.LENGTH_SHORT).show();
}
});
}
private void getScanResults(@NonNull final List<ScanResult> results) {
if (results.isEmpty()) {
Log.e("TAG", "SCAN RESULTS IT'S EMPTY");
return;
}
Log.e("TAG", "GOT SCAN RESULTS " + results);
}
private void checkResult(boolean isSuccess) {
if (isSuccess)
Toast.makeText(context, "WIFI已经打开", Toast.LENGTH_SHORT).show();
else
Toast.makeText(context, "无法打开wifi", Toast.LENGTH_SHORT).show();
}
}
end