最近家里老人总是问我如何连接WIFI,和他们电话讲又讲不清楚,于是我想到了写一个,打开自动连接指定WIFI的软件。练练手。
废话不多说,首先布局,简单!
两个文本框一个按钮
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:andro
xmlns:app="/apk/res-auto"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Shezhi"
android:orientation="vertical"
android:background="#b2cbfd"
android:focusable="true"
android:focusableInTouchMode="true">
<EditText
android:hint="请输入wifi名"
android:layout_marginTop="10dp"
android:
android:layout_width="match_parent"
android:layout_height="50dp" />
<EditText
android:hint="请输入wifi密码"
android:layout_marginTop="10dp"
android:
android:layout_width="match_parent"
android:layout_height="50dp" />
<Button
android:textSize="20sp"
android:text="确定"
android:
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
设置连接WIFI名和密码
将用户输入的WIFI名和密码保存到sp中
public class Shezhi extends AppCompatActivity {
private EditText mingzi;
private EditText mima;
private SharedPreferences sharedPreferences;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
(savedInstanceState);
setContentView(.activity_shezhi);
chushihua();
(new () {
@Override
public void onClick(View v) {
String trim = ().toString().trim();
String trim1 = ().toString().trim();
if (!() && !()){
edit = ();
("mingzi",trim);
("mima",trim1);
();
(getApplicationContext(),"设置成功",Toast.LENGTH_SHORT).show();
finish();
}else {
(getApplicationContext(),"不能为空",Toast.LENGTH_SHORT).show();
}
}
});
}
private void chushihua() {
mingzi=(EditText)findViewById();
mima=(EditText)findViewById();
button=(Button)findViewById();
sharedPreferences=getSharedPreferences("wifi",0);
}
}
WIFI连接工具类
这是一个封装好的类(用于连接WIFI的一系列操作),具体里面注释了
public class Wifigongju {
// 定义WifiManager对象
private WifiManager mWifiManager;
// 定义WifiInfo对象
private WifiInfo mWifiInfo;
// 扫描出的网络连接列表
private List<ScanResult> mWifiList;
// 网络连接列表
private List<WifiConfiguration> mWifiConfiguration;
// 定义一个WifiLock
mWifiLock;
// 构造器
public Wifigongju(Context context) {
// 取得WifiManager对象
mWifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
// 取得WifiInfo对象
mWifiInfo = ();
}
// 打开WIFI
public void openWifi() {
if (!()) {
(true);
}else {
return;
}
}
// 关闭WIFI
public void closeWifi() {
if (()) {
(false);
}
}
// 检查当前WIFI状态
public int checkState() {
return ();
}
// 锁定WifiLock
public void acquireWifiLock() {
();
}
// 解锁WifiLock
public void releaseWifiLock() {
// 判断时候锁定
if (()) {
();
}
}
// 创建一个WifiLock
public void creatWifiLock() {
mWifiLock = ("Test");
}
// 得到配置好的网络
public List<WifiConfiguration> getConfiguration() {
return mWifiConfiguration;
}
// 指定配置好的网络进行连接
public void connectConfiguration(int index) {
// 索引大于配置好的网络索引返回
if (index > ()) {
return;
}
// 连接配置好的指定ID的网络
((index).networkId,
true);
}
public void startScan() {
();
// 得到扫描结果
mWifiList = ();
// 得到配置好的网络连接
mWifiConfiguration = ();
}
// 得到网络列表
public List<ScanResult> getWifiList() {
return mWifiList;
}
// 查看扫描结果
public StringBuilder lookUpScan() {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < (); i++) {
stringBuilder
.append("Index_" + new Integer(i + 1).toString() + ":");
// 将ScanResult信息转换成一个字符串包
// 其中把包括:BSSID、SSID、capabilities、frequency、level
(((i)).toString());
("/n");
}
return stringBuilder;
}
// 得到MAC地址
public String getMacAddress() {
return (mWifiInfo == null) ? "NULL" : ();
}
// 得到接入点的BSSID
public String getBSSID() {
return (mWifiInfo == null) ? "NULL" : ();
}
// 得到IP地址
public int getIPAddress() {
return (mWifiInfo == null) ? 0 : ();
}
// 得到连接的ID
public int getNetworkId() {
return (mWifiInfo == null) ? 0 : ();
}
// 得到WifiInfo的所有信息包
public String getWifiInfo() {
return (mWifiInfo == null) ? "NULL" : ();
}
// 添加一个网络并连接
public boolean addNetwork(WifiConfiguration wcg) {
int wcgID = (wcg);
boolean b = (wcgID, true);
("连接状态", (b));
return b;
}
// 断开指定ID的网络
public void disconnectWifi(int netId) {
(netId);
();
}
//然后是一个实际应用方法,只验证过没有密码的情况:
public WifiConfiguration CreateWifiInfo(String SSID, String Password, int Type)
{
// while (() == WifiManager.WIFI_STATE_ENABLING){
//
// try {
// ();
// (100);
// } catch (InterruptedException e) {
// ();
// }
// }
WifiConfiguration config = new WifiConfiguration();
();
();
();
();
();
= "\""+SSID+"\"";
WifiConfiguration tempConfig = (SSID);
if (tempConfig != null) {
();
}
if (Type == 1) //WIFICIPHER_NOPASS
{
[0] = "";
();
= 0;
}
if (Type == 2) //WIFICIPHER_WEP
{
= true;
[0] = "\""+Password+"\"";
();
();
();
(.WEP40);
(.WEP104);
();
= 0;
}
if (Type == 3) //WIFICIPHER_WPA
{
="\""+Password+"\"";
= true;
();
();
(.WPA_PSK);
();
//();
();
();
= ;
}
return config;
}
private WifiConfiguration IsExsits(String SSID)
{
while (()==null){
try {
();
(200);
} catch (InterruptedException e) {
();
}
}
List<WifiConfiguration> existingConfigs = ();
for (WifiConfiguration existingConfig : existingConfigs) {
if (("\"" + SSID + "\"")) {
return existingConfig;
}
}
return null;
}
}
这个类是通用的只要连接WIFI就可以使用这个工具类
由于连接WIFI需要权限,所以我们需要授权
授权(z这是一个封装好的回调接口)动态授权
public class BaseActivity extends AppCompatActivity {
public interface PermissionListener {
void onGranted();//已授权
void onDenied(List<String> deniedPermission);//未授权
}
private PermissionListener mListener;
private static final int PERMISSION_REQUESTCODE = 100;
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
(savedInstanceState, persistentState);
}
public void requestRunPermisssion(String[] permissions, PermissionListener listener){
mListener = listener;
List<String> permissionLists = new ArrayList<>();
for(String permission : permissions){
if((this, permission) != PackageManager.PERMISSION_GRANTED){
(permission);
}
}
if(!()){
(this, (new String[()]), PERMISSION_REQUESTCODE);
}else{
//表示全都授权了
();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
(requestCode, permissions, grantResults);
switch (requestCode){
case PERMISSION_REQUESTCODE:
if( > 0){
//存放没授权的权限
List<String> deniedPermissions = new ArrayList<>();
for(int i = 0; i < ; i++){
int grantResult = grantResults[i];
String permission = permissions[i];
if(grantResult != PackageManager.PERMISSION_GRANTED){
(permission);
}
}
if(()){
//说明都授权了
();
}else{
(deniedPermissions);
}
}
break;
default:
break;
}
}
}
接下来我们只需要在Main中使用
public class MainActivity extends BaseActivity {
private Button button;
private SharedPreferences sharedPreferences;
private TextView shuju;
private TextView jieguo;
@Override
protected void onCreate(Bundle savedInstanceState) {
(savedInstanceState);
setContentView(.activity_main);
chushihua();
sharedPreferences = getSharedPreferences("wifi", 0);
dongtaishouquan();
}
private void dongtaishouquan() {
requestRunPermisssion(new String[]{.CHANGE_NETWORK_STATE, .CHANGE_WIFI_STATE, .ACCESS_NETWORK_STATE, .ACCESS_WIFI_STATE, .ACCESS_FINE_LOCATION}, new PermissionListener() {
@Override
public void onGranted() {
if (("mingzi", "sss").equals("sss") && ("mima", "0").equals("0")) {
("失败原因没有设置wifi,请点击下方按钮设置要连接的wifi");
} else {
Wifigongju wifigongju = new Wifigongju(getApplicationContext());
();
boolean b = ((("mingzi", "sss"), ("mima", "0"), 3));
if (b) {
("连接成功");
("已连接至" + ());
} else {
("连接失败");
}
}
}
@Override
public void onDenied(List<String> deniedPermission) {
}
});
}
private void chushihua () {
button = (Button) findViewById();
(new () {
@Override
public void onClick(View v) {
startActivity(new Intent(getApplicationContext(), ));
}
});
shuju = (TextView) findViewById();
jieguo = (TextView) findViewById();
}
}
最后权限说明 (重要)
<uses-permission android:name=".CHANGE_NETWORK_STATE" />
<!-- //修改网络状态权限 -->
<uses-permission android:name=".CHANGE_WIFI_STATE" />
<!-- 修改wifi状态的权限 -->
<uses-permission android:name=".ACCESS_NETWORK_STATE" />
<!-- //访问网络权限 -->
<uses-permission android:name=".ACCESS_WIFI_STATE" />
<!-- //访问wifi权限 -->
<uses-permission android:name=".ACCESS_FINE_LOCATION" />
<!-- 定位权限 -->
这些权限最好都加上,防止app炸!
学习永无止境!加油。