失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android wifi开启扫描连接

Android wifi开启扫描连接

时间:2022-01-09 11:28:51

相关推荐

Android wifi开启扫描连接

权限

1.打开wifi权限<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />2.扫描wifi权限<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

1.开关按钮UI(switch_bluetooth)

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="@dimen/item_hight"android:gravity="center_vertical"android:orientation="horizontal">//开关按钮<Switchandroid:track="@drawable/switch_selector"android:thumb="@drawable/selector_thumb_check"android:id="@+id/swtich"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>

2.wifi utils(WifiUtil)

public class WifiUtil {private final WifiManager mWifiManager;private final WifiInfo mWifiInfo;private static WifiUtil wifiUtil;private List<WifiConfiguration> mWifiConfiguration;public Context mcontext;private final ConnectivityManager mConnectivityManager;public static final int INVALID_NET_ID = -1;private static final Pattern HEX_PATTERN = pile("^[0-9A-F]+$");private WifiUtil(Context context) {mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);mWifiInfo = mWifiManager.getConnectionInfo();mcontext = context;mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);}public static WifiUtil getInstance(Context context) {if (wifiUtil == null) {wifiUtil = new WifiUtil(context);}return wifiUtil;}//open wifipublic void openWiFi() {if (!isWifiEnable() && null != mWifiManager) {mWifiManager.setWifiEnabled(true);}}//close wifipublic void closeWiFi() {if (isWifiEnable() && null != mWifiManager) {mWifiManager.setWifiEnabled(false);}}public boolean isWifiEnable() {return mWifiManager.isWifiEnabled();}@SuppressLint("MissingPermission")public List<WifiConfiguration> getLocalWifi() {mWifiConfiguration = mWifiManager.getConfiguredNetworks();return mWifiConfiguration;}//connect local wifipublic void connectConfiguration(WifiConfiguration wifiConfiguration) {mWifiManager.enableNetwork(workId, true);}public void startScan() {if (null != mWifiManager) {mWifiManager.startScan();}}public List<ScanResult> getScanResults() {if (null != mWifiManager) {return mWifiManager.getScanResults();}return null;}//wifihot isopenpublic boolean isApOn() {WifiManager wifimanager = (WifiManager) mcontext.getSystemService(mcontext.WIFI_SERVICE);try {Method method = wifimanager.getClass().getDeclaredMethod("isWifiApEnabled");method.setAccessible(true);return (Boolean) method.invoke(wifimanager);} catch (Throwable ignored) {}return false;}}

3.开关按钮java(WifiSwitchView)

public class WifiSwitchView extends LinearLayout {private final Switch swtich;public WifiSwitchView(Context paramContext, AttributeSet paramAttributeSet) {super(paramContext, paramAttributeSet);View view = View.inflate(paramContext, R.layout.switch_bluetooth, this);swtich = view.findViewById(R.id.swtich);if (WifiUtil.getInstance(getContext()).isWifiEnable()) {swtich.setChecked(true);} else {swtich.setChecked(false);}swtich.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (swtich.isChecked()) {WifiUtil.getInstance(getContext()).openWiFi();Toast.makeText(paramContext, "开启wifi", Toast.LENGTH_SHORT).show();} else {WifiUtil.getInstance(getContext()).closeWiFi();Toast.makeText(paramContext, "关闭wifi", Toast.LENGTH_SHORT).show();}}});}4

4.扫描按钮UI(drop_down_more)

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:id="@+id/bluetooth_ll_retrivel"android:layout_width="@dimen/item_short_width"android:layout_height="@dimen/item_short_hight"android:background="@drawable/round_light"android:paddingLeft="@dimen/padding_start"android:paddingRight="@dimen/padding_start"android:orientation="horizontal"><TextViewandroid:id="@+id/bluetooth_tv_retrivel"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_gravity="center"android:layout_weight="1"android:text="@string/bluetooth_equipment_retrivel"android:textSize="@dimen/middle_title"android:gravity="center_vertical"android:textColor="@color/text_dark" /></LinearLayout>

5.弹框显示扫描UI (pop_wifiwindow)

<?xml version="1.0" encoding="utf-8"?><androidx.recyclerview.widget.RecyclerView xmlns:android="/apk/res/android"android:layout_width="match_parent"android:id="@+id/wifi_rl"android:background="#ffffff"android:layout_height="400dp"></androidx.recyclerview.widget.RecyclerView>

6.弹框显示扫描itemUI(pop_wifirecy_item)

<?xml version="1.0" encoding="utf-8"?><androidx.recyclerview.widget.RecyclerView xmlns:android="/apk/res/android"android:layout_width="match_parent"android:id="@+id/wifi_rl"android:background="#ffffff"android:layout_height="400dp"></androidx.recyclerview.widget.RecyclerView>

7.wifi适配器(WifiRecyclerAdapter)

package com.example.baoya.adapter;import android.content.Context;import .wifi.ScanResult;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.RelativeLayout;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.recyclerview.widget.RecyclerView;import com.example.baoya.R;import java.util.List;public class WifiRecyclerAdapter extends RecyclerView.Adapter<WifiRecyclerAdapter.ViewHolder>{Context context;List<ScanResult> scanResults;public WifiRecyclerAdapter(Context context, List<ScanResult> scanResults) {this.context=context;this.scanResults =scanResults;}@NonNull@Overridepublic WifiRecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {return new ViewHolder(LayoutInflater.from(context).inflate(R.layout.pop_wifirecy_item,parent,false));}@Overridepublic void onBindViewHolder(@NonNull WifiRecyclerAdapter.ViewHolder holder, final int position) {holder.wifi_name.setText(scanResults.get(position).SSID);holder.wifi_recy.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (itemOnClick!=null){itemOnClick.Success(position,scanResults.get(position).SSID);}}});}@Overridepublic int getItemCount() {return scanResults==null?0:scanResults.size();}public class ViewHolder extends RecyclerView.ViewHolder {TextView wifi_name;RelativeLayout wifi_recy;public ViewHolder(@NonNull View itemView) {super(itemView);wifi_recy = itemView.findViewById(R.id.wifi_recy);wifi_name = itemView.findViewById(R.id.wifi_name);}}public interface ItemOnClick{void Success(int position,String ssid);}ItemOnClick itemOnClick;public void setItemOnClick(ItemOnClick itemOnClick){this.itemOnClick=itemOnClick;}}

8.扫描显示java(WifiDeviceListView)

public class WifiDeviceListView extends LinearLayout {private final LinearLayout bluetooth_ll_retrivel;private PopupWindow popupWindow;private final WifiManager mWifiManager;private List<ScanResult> scanResults;private List<ScanResult> arrlist;private RecyclerView mWifi_rl;private EditText mEd_password;private WifiRecyclerAdapter wifiRecyclerAdapter;public WifiDeviceListView(Context paramContext, AttributeSet paramAttributeSet) {super(paramContext, paramAttributeSet);//设备搜索页面View view = View.inflate(paramContext, R.layout.drop_down_more, this);bluetooth_ll_retrivel = view.findViewById(R.id.bluetooth_ll_retrivel);//wifimanagermWifiManager = (WifiManager) paramContext.getSystemService(WIFI_SERVICE);//点击搜索bluetooth_ll_retrivel.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (mWifiManager.isWifiEnabled()){WifiUtil.getInstance(getContext()).startScan();new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(2000);if (mWifiManager.getWifiState()==WifiManager.WIFI_STATE_ENABLED){mWifiManager.startScan();}} catch (InterruptedException e) {e.printStackTrace();}}}).start();}else{if (arrlist!=null){arrlist.clear();}Toast.makeText(paramContext, "先打开wifi", Toast.LENGTH_SHORT).show();}//弹窗popwindow();}});}//广播BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)){scanResults = mWifiManager.getScanResults();Collections.sort(scanResults, new Comparator<ScanResult>() {@Overridepublic int compare(ScanResult o1, ScanResult o2) {return o2.level-o1.level;}});Log.i("TAG", scanResults.toString());if (scanResults != null) {if (arrlist !=null){arrlist.clear();}//判断名称不能为空和重复for (int i = 0; i < scanResults.size(); i++) {if ((!scanResults.get(i).SSID.equals("")||!scanResults.get(i).SSID.isEmpty())){arrlist.add(scanResults.get(i));for (int j = 0; j <arrlist.size()-1 ; j++) {for (int k = arrlist.size()-1; k >j ; k--) {if (arrlist.get(j).SSID.equals(arrlist.get(k).SSID)){arrlist.remove(arrlist.get(j));}}}}}wifiRecyclerAdapter.notifyDataSetChanged();}}}};public void popwindow() {View view = LayoutInflater.from(getContext()).inflate(R.layout.pop_wifiwindow, null);IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);getContext().registerReceiver(broadcastReceiver,intentFilter);popupWindow = new PopupWindow(view);popupWindow.setFocusable(true);Rect rect1 = new Rect();arrlist=new ArrayList<>();bluetooth_ll_retrivel.getWindowVisibleDisplayFrame(rect1);mWifi_rl = view.findViewById(R.id.wifi_rl);mWifi_rl.setLayoutManager(new LinearLayoutManager(getContext(),RecyclerView.VERTICAL,false));Rect rect2 = new Rect();bluetooth_ll_retrivel.getGlobalVisibleRect(rect2);wifiRecyclerAdapter = new WifiRecyclerAdapter(getContext(), arrlist);mWifi_rl.setAdapter(wifiRecyclerAdapter);popupWindow.setWidth(bluetooth_ll_retrivel.getWidth());popupWindow.setHeight(rect1.bottom - rect2.bottom);popupWindow.showAsDropDown(bluetooth_ll_retrivel);wifiRecyclerAdapter.setItemOnClick(new WifiRecyclerAdapter.ItemOnClick() {@Overridepublic void Success(int position, String ssid) {//点击连接wifishowPopupWindow(ssid);}});}public void showPopupWindow(final String ssid){AlertDialog.Builder builder = new AlertDialog.Builder(getContext());final View inflate = LayoutInflater.from(getContext()).inflate(R.layout.pop_wifi_connection, null);builder.setView(inflate);builder.setTitle(ssid);builder.setPositiveButton("连接", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {mEd_password = inflate.findViewById(R.id.ed_password);String password = mEd_password.getText().toString();connectWifiPws(ssid,password);Toast.makeText(getContext(), "正在连接", Toast.LENGTH_SHORT).show();}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Override public void onClick(DialogInterface dialog, int which) {dialog.dismiss();Toast.makeText(getContext(), "取消连接", Toast.LENGTH_SHORT).show();}});builder.setCancelable(false);builder.show();}/*** 有密码连接* @param ssid* @param pws*/public void connectWifiPws(String ssid, String pws){mWifiManager.disableNetwork(mWifiManager.getConnectionInfo().getNetworkId());int netId = mWifiManager.addNetwork(getWifiConfig(ssid, pws, true));mWifiManager.enableNetwork(netId, true);}/*** 无密码连接* @param ssid*/public void connectWifiNoPws(String ssid){mWifiManager.disableNetwork(mWifiManager.getConnectionInfo().getNetworkId());int netId = mWifiManager.addNetwork(getWifiConfig(ssid, "", false));mWifiManager.enableNetwork(netId, true);}/*** wifi设置* @param ssid* @param pws* @param isHasPws*/private WifiConfiguration getWifiConfig(String ssid, String pws, boolean isHasPws){WifiConfiguration config = new WifiConfiguration();config.allowedAuthAlgorithms.clear();config.allowedGroupCiphers.clear();config.allowedKeyManagement.clear();config.allowedPairwiseCiphers.clear();config.allowedProtocols.clear();config.SSID = "\"" + ssid + "\"";WifiConfiguration tempConfig = isExist(ssid);if(tempConfig != null) {mWifiManager.removeNetwork(workId);}if (isHasPws){config.preSharedKey = "\""+pws+"\"";config.hiddenSSID = true;config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);config.allowedGroupCiphers.set(MP);config.allowedPairwiseCiphers.set(MP);config.status = WifiConfiguration.Status.ENABLED;}else {config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);}return config;}/*** 得到配置好的网络连接* @param ssid* @return*/private WifiConfiguration isExist(String ssid) {@SuppressLint("MissingPermission") List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks();for (WifiConfiguration config : configs) {if (config.SSID.equals("\""+ssid+"\"")) {return config;}}return null;}

9.连接wifiUI(pop_wifi_connection)

2.wifi utils(WifiUtil)2.wifi utils(WifiUtil)2.wifi utils(WifiUtil)2.wifi utils(WifiUtil)ee

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="50dp"><TextViewandroid:id="@+id/pwss_word"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="输入密码:"android:layout_marginLeft="15dp"android:layout_centerVertical="true"></TextView><EditTextandroid:id="@+id/ed_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toRightOf="@+id/pwss_word"android:layout_centerVertical="true"></EditText></RelativeLayout>

10.wifi连接监听器:连接上及时刷新SSID

//WiFi连接监听注册IntentFilter wifiConnection = new IntentFilter();wifiConnection.addAction(WORK_STATE_CHANGED_ACTION);wifiConnection.addAction(ConnectivityManager.CONNECTIVITY_ACTION);getContext().registerReceiver(new WifiConnectionReceiver(),wifiConnection);

class WifiConnectionReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//wifi连接上与否if (intent.getAction().equals(WORK_STATE_CHANGED_ACTION)) {NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);if (info.getState().equals(NetworkInfo.State.CONNECTED)) {WifiManager wifiManager = (WifiManager) getActivity().getSystemService(WIFI_SERVICE);WifiInfo connectionInfo = wifiManager.getConnectionInfo();if (connectionInfo.getSSID()!=null) {editText.setText(connectionInfo.getSSID());}}else if (info.getState().equals(NetworkInfo.State.DISCONNECTED)){editText.setText("设备名称");}}}}

如果觉得《Android wifi开启扫描连接》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。