当前位置: 首页 > wzjs >正文

优化手机访问网站速度wordpress 编辑器添加自定义按钮

优化手机访问网站速度,wordpress 编辑器添加自定义按钮,网站app怎么制作教程,wordpress字体更改Android在全局范围内使用WifiUtils工具类,我们可以将其设计为一个单例,并通过Application类进行初始化。这样可以确保在整个应用程序中只有一个WifiUtils实例,并且可以在任何地方访问它。以下是实现全局使用的步骤和代码示例: 记…

Android在全局范围内使用WifiUtils工具类,我们可以将其设计为一个单例,并通过Application类进行初始化。这样可以确保在整个应用程序中只有一个WifiUtils实例,并且可以在任何地方访问它。以下是实现全局使用的步骤和代码示例:

记得在AndroidManifest.xml配置文件中配置权限:

<!--    网络权限--><uses-permission android:name="android.permission.INTERNET"/>
<!--    wifi权限--><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_NETWORK_STATE"/><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

1. 创建自定义Application

首先,创建一个自定义的Application类,用于初始化WifiUtils

import android.app.Application;public class MyApplication extends Application {private static MyApplication instance;private WifiUtils wifiUtils;@Overridepublic void onCreate() {super.onCreate();instance = this;wifiUtils = WifiUtils.getInstance(this);}public static MyApplication getInstance() {return instance;}public WifiUtils getWifiUtils() {return wifiUtils;}
}

  1. AndroidManifest.xml中注册Application

AndroidManifest.xml中,将MyApplication类设置为应用程序的Application类。

 <applicationandroid:name=".MyApplication"android:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.MyPagerViewDemo"tools:targetApi="31">...
</application>

3. 修改WifiUtils工具类

确保WifiUtils是一个单例类,并且可以通过Application类访问。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiNetworkSuggestion;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;public class WifiUtils {private static final String TAG = "WifiUtils";private static final int CONNECTION_TIMEOUT = 30000; // 30秒超时private static final int MAX_RETRY_COUNT = 3; // 最大重试次数private static WifiUtils instance;private WifiManager wifiManager;private Context context;private Handler mainHandler;private Set<ScanResult> cachedScanResults;private WifiStateReceiver wifiStateReceiver;private AtomicBoolean isConnecting = new AtomicBoolean(false);private Runnable connectionTimeoutTask;private int retryCount = 0;// 回调接口public interface WifiConnectionListener {void onConnectionSuccess();void onConnectionFailure(String errorMessage);}public interface WifiScanListener {void onScanResultsReceived(List<ScanResult> scanResults);void onScanFailure(String errorMessage);}// 单例模式public static synchronized WifiUtils getInstance(Context context) {if (instance == null) {instance = new WifiUtils(context.getApplicationContext());}return instance;}private WifiUtils(Context context) {this.context = context;this.wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);this.mainHandler = new Handler(Looper.getMainLooper());this.cachedScanResults = new HashSet<>();registerWifiStateReceiver();}// 注册WiFi状态监听private void registerWifiStateReceiver() {wifiStateReceiver = new WifiStateReceiver();IntentFilter filter = new IntentFilter();filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);context.registerReceiver(wifiStateReceiver, filter);}// 注销WiFi状态监听public void unregisterWifiStateReceiver() {if (wifiStateReceiver != null) {context.unregisterReceiver(wifiStateReceiver);wifiStateReceiver = null;}}// 检查WiFi是否启用public boolean isWifiEnabled() {return wifiManager != null && wifiManager.isWifiEnabled();}// 启用WiFipublic boolean enableWifi() {if (wifiManager != null) {return wifiManager.setWifiEnabled(true);}return false;}// 扫描WiFipublic void startScan(@NonNull WifiScanListener listener) {if (wifiManager == null) {listener.onScanFailure("WifiManager is not available");return;}new Thread(() -> {boolean scanSuccess = wifiManager.startScan();if (!scanSuccess) {mainHandler.post(() -> listener.onScanFailure("Failed to start scan"));}}).start();}// 获取扫描结果public List<ScanResult> getScanResults() {return new ArrayList<>(cachedScanResults);}// 连接到指定WiFipublic void connectToWifi(@NonNull String ssid, @NonNull String password, WifiConnectionListener listener) {if (isConnecting.get()) {listener.onConnectionFailure("A connection attempt is already in progress");return;}if (TextUtils.isEmpty(ssid) || TextUtils.isEmpty(password)) {listener.onConnectionFailure("SSID or password is empty");return;}if (!isWifiEnabled()) {listener.onConnectionFailure("WiFi is not enabled");return;}isConnecting.set(true);startConnectionTimeout(listener);new Thread(() -> {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {connectToWifiWithSuggestion(ssid, password, listener);} else {connectToWifiLegacy(ssid, password, listener);}}).start();}// 传统方式连接WiFi(Android 9及以下)private void connectToWifiLegacy(String ssid, String password, WifiConnectionListener listener) {WifiConfiguration config = createWifiConfig(ssid, password);if (config == null) {handleConnectionFailure(listener, "Failed to create WifiConfiguration");return;}int netId = wifiManager.addNetwork(config);if (netId == -1) {handleConnectionFailure(listener, "Failed to add network");return;}boolean isDisconnected = wifiManager.disconnect();if (!isDisconnected) {handleConnectionFailure(listener, "Failed to disconnect from current network");return;}boolean isEnabled = wifiManager.enableNetwork(netId, true);if (!isEnabled) {handleConnectionFailure(listener, "Failed to enable network");return;}boolean isReconnected = wifiManager.reconnect();if (!isReconnected) {handleConnectionFailure(listener, "Failed to reconnect");return;}handleConnectionSuccess(listener);}// 使用WifiNetworkSuggestion连接WiFi(Android 10及以上)@RequiresApi(api = Build.VERSION_CODES.Q)private void connectToWifiWithSuggestion(String ssid, String password, WifiConnectionListener listener) {WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder().setSsid(ssid).setWpa2Passphrase(password).setIsHiddenSsid(false).build();List<WifiNetworkSuggestion> suggestionsList = new ArrayList<>();suggestionsList.add(suggestion);int status = wifiManager.addNetworkSuggestions(suggestionsList);if (status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {handleConnectionSuccess(listener);} else {handleConnectionFailure(listener, "Failed to add network suggestion");}}// 处理连接成功private void handleConnectionSuccess(WifiConnectionListener listener) {isConnecting.set(false);retryCount = 0;mainHandler.removeCallbacks(connectionTimeoutTask);mainHandler.post(listener::onConnectionSuccess);}// 处理连接失败private void handleConnectionFailure(WifiConnectionListener listener, String errorMessage) {if (retryCount < MAX_RETRY_COUNT) {retryCount++;Log.d(TAG, "Retrying connection attempt " + retryCount);connectToWifi(ssid, password, listener);} else {isConnecting.set(false);retryCount = 0;mainHandler.removeCallbacks(connectionTimeoutTask);mainHandler.post(() -> listener.onConnectionFailure(errorMessage));}}// 启动连接超时任务private void startConnectionTimeout(WifiConnectionListener listener) {connectionTimeoutTask = () -> handleConnectionFailure(listener, "Connection timed out");mainHandler.postDelayed(connectionTimeoutTask, CONNECTION_TIMEOUT);}// 创建WifiConfigurationprivate WifiConfiguration createWifiConfig(String ssid, String password) {try {WifiConfiguration config = new WifiConfiguration();config.SSID = String.format("\"%s\"", ssid);config.preSharedKey = String.format("\"%s\"", password);config.status = WifiConfiguration.Status.ENABLED;config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);return config;} catch (Exception e) {Log.e(TAG, "Failed to create WifiConfiguration: " + e.getMessage());return null;}}// 获取当前连接的WiFi信息public WifiInfo getConnectedWifiInfo() {if (wifiManager != null) {return wifiManager.getConnectionInfo();}return null;}// 断开当前WiFi连接public boolean disconnectFromWifi() {if (wifiManager != null) {return wifiManager.disconnect();}return false;}// WiFi状态监听器private class WifiStateReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) {// 更新缓存扫描结果if (wifiManager != null) {cachedScanResults = new HashSet<>(wifiManager.getScanResults());}} else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {// 处理网络状态变化WifiInfo wifiInfo = getConnectedWifiInfo();if (wifiInfo != null) {Log.d(TAG, "Connected to: " + wifiInfo.getSSID());}}}}
}

4. 在全局范围内使用WifiUtils

在任何ActivityFragment中,都可以通过MyApplication类获取WifiUtils实例,并调用其方法。

public class MainActivity extends AppCompatActivity {private WifiUtils wifiUtils;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取WifiUtils实例wifiUtils = ((MyApplication) getApplication()).getWifiUtils();// 检查并启用WiFiif (!wifiUtils.isWifiEnabled()) {wifiUtils.enableWifi();}// 扫描WiFiwifiUtils.startScan(new WifiUtils.WifiScanListener() {@Overridepublic void onScanResultsReceived(List<ScanResult> scanResults) {for (ScanResult result : scanResults) {Log.d("WifiScan", "SSID: " + result.SSID);}}@Overridepublic void onScanFailure(String errorMessage) {Log.e("WifiScan", "Scan failed: " + errorMessage);}});// 连接到指定WiFiString ssid = "YourWiFiSSID";String password = "YourWiFiPassword";wifiUtils.connectToWifi(ssid, password, new WifiUtils.WifiConnectionListener() {@Overridepublic void onConnectionSuccess() {Log.d("WifiConnect", "Connected to " + ssid);}@Overridepublic void onConnectionFailure(String errorMessage) {Log.e("WifiConnect", "Failed to connect: " + errorMessage);}});// 获取当前连接的WiFi信息WifiInfo wifiInfo = wifiUtils.getConnectedWifiInfo();if (wifiInfo != null) {Log.d("WifiInfo", "Connected to: " + wifiInfo.getSSID());}// 断开当前WiFi连接boolean isDisconnected = wifiUtils.disconnectFromWifi();if (isDisconnected) {Log.d("WifiDisconnect", "Disconnected from current WiFi");}}@Overrideprotected void onDestroy() {super.onDestroy();wifiUtils.unregisterWifiStateReceiver();}
}

5. 总结

通过以上步骤,我们实现了WifiUtils工具类的全局使用。它具有以下优点:

  1. 单例模式:确保全局只有一个实例。
  2. 全局访问:通过Application类在任何地方访问WifiUtils
  3. 高性能:后台线程执行耗时操作,避免阻塞主线程。
  4. 健壮性:详细的错误处理和状态检查。
  5. 易用性:模块化设计,接口清晰,易于扩展和维护。

在实际开发中,建议根据具体需求进一步调整和扩展功能。


文章转载自:

http://qwId1vGd.wqkfm.cn
http://aTWx9wg9.wqkfm.cn
http://p4JveRHG.wqkfm.cn
http://wUzF5bH4.wqkfm.cn
http://Pv7hTKcI.wqkfm.cn
http://hB6IStgO.wqkfm.cn
http://ojNvdKQm.wqkfm.cn
http://qKFJb15g.wqkfm.cn
http://UMqZyqcX.wqkfm.cn
http://RSpAZvJx.wqkfm.cn
http://sLVaGgX9.wqkfm.cn
http://HuwVb7Ri.wqkfm.cn
http://Wf3ofL4v.wqkfm.cn
http://BKnpYlTv.wqkfm.cn
http://vyuFZB15.wqkfm.cn
http://qaF8ERKv.wqkfm.cn
http://yT6iSH5A.wqkfm.cn
http://nWfUK15d.wqkfm.cn
http://Bw7Uolsj.wqkfm.cn
http://AcFbLpe6.wqkfm.cn
http://kqVYjwoB.wqkfm.cn
http://YNRyEp7V.wqkfm.cn
http://VfvvcMFN.wqkfm.cn
http://ZE4AW5F5.wqkfm.cn
http://k8sryRYM.wqkfm.cn
http://QKwmfUea.wqkfm.cn
http://tgo2rC8I.wqkfm.cn
http://eNTopruQ.wqkfm.cn
http://poQWEmLN.wqkfm.cn
http://xD72MtqB.wqkfm.cn
http://www.dtcms.com/wzjs/649952.html

相关文章:

  • 民治营销型网站制作可信网站认证有用吗
  • 网站建设微信营销企业官网首页源码
  • 网站建设前景展望江西软件职业技术大学
  • 长沙做一个网站要多少钱个人网站赚广告费
  • 山西建设网站的公司用jquery制作网页
  • 品牌网站建设的要点做logo什么网站
  • 北京网站建设 seo公司哪家好百度推广需要什么条件
  • 网站开发专业基础课程it培训机构都有哪些
  • 青岛做优化网站哪家好想做运营怎么入手
  • 鞍山网站建设公司上海网站建设官方网站
  • 蚂蚁建站苏州做网站优化
  • 做影视网站违法莫黄岛做网站哪家好
  • 360做网站的谷歌seo 优化
  • 重庆市建设工程安全网站湖南环保设备公司中企动力网站建设技术支持
  • 自适应网站设计规范品牌建设表态发言
  • 做阿里云网站临汾万词霸屏网站建设免费咨询
  • 蚌埠网站制作公司排名新的龙岗网站建设
  • 大型网站制作商业网站制作价格
  • 教育网站开发需求网站建设哪个空间比较好
  • 上广东建设厅网站汉唐皓月网站推广方案
  • 做的好的营销型网站有哪些内容网站推广位怎么设置
  • 龙游建设局网站北京公司黄页
  • 网站建设需要哪些流程南京定制网站
  • 帝国cms做笑话网站wordpress short ping
  • 克州seo整站排名wordpress插件video playe
  • 学做网站要多久多少钱关键词推广工具
  • 有什么网站可以做电子创建网站如何注册
  • 常州网站建设外包作文网站投稿
  • 找公司做网站的好处网站建设优化服务方案模板
  • 瓷砖网站模板企业公示信息查询系统吉林