Qt for Android获取手机热点开关状态
16lz
2021-12-04
Qt开发android应用,从Qt端调用android原生接口获取手机热点开关状态,首先来看一下封装好的android接口类wifiHostBiz.java
(以下代码来自网络)
package com.lyy.test;import android.content.Context;import android.net.wifi.ScanResult;import android.net.wifi.WifiConfiguration;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.net.wifi.WifiManager.WifiLock;import android.util.Log;import java.lang.reflect.Method;/** * WIFI热点业务类 * 获取热点状态,设置热点开关 * */public class WifiHostBiz { private final String TAG = "WifiHostBiz"; private WifiManager wifiManager; private String WIFI_HOST_SSID = "AndroidAP"; private String WIFI_HOST_PRESHARED_KEY = "12345678";// 密码必须大于8位数 public WifiHostBiz(Context context) { super(); //获取wifi管理服务 wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); } /**判断热点开启状态*/ public boolean isWifiApEnabled() { return getWifiApState() == WIFI_AP_STATE.WIFI_AP_STATE_ENABLED; } private WIFI_AP_STATE getWifiApState(){ int tmp; try { Method method = wifiManager.getClass().getMethod("getWifiApState"); tmp = ((Integer) method.invoke(wifiManager)); // Fix for Android 4 if (tmp > 10) { tmp = tmp - 10; } return WIFI_AP_STATE.class.getEnumConstants()[tmp]; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return WIFI_AP_STATE.WIFI_AP_STATE_FAILED; } } public enum WIFI_AP_STATE { WIFI_AP_STATE_DISABLING, WIFI_AP_STATE_DISABLED, WIFI_AP_STATE_ENABLING, WIFI_AP_STATE_ENABLED, WIFI_AP_STATE_FAILED } /** * wifi热点开关 * @param enabledtrue:打开 false:关闭 * @returntrue:成功 false:失败 */ public boolean setWifiApEnabled(boolean enabled) { System.out.println(TAG + ":开启热点"); if (enabled) { // disable WiFi in any case //wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi wifiManager.setWifiEnabled(false); System.out.println(TAG + ":关闭wifi"); }else{ wifiManager.setWifiEnabled(true); } try { //热点的配置类 WifiConfiguration apConfig = new WifiConfiguration(); //配置热点的名称(可以在名字后面加点随机数什么的) apConfig.SSID = WIFI_HOST_SSID; //配置热点的密码 apConfig.preSharedKey = WIFI_HOST_PRESHARED_KEY; //安全:WPA2_PSK apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); //通过反射调用设置热点 Method method = wifiManager.getClass().getMethod( "setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE); //返回热点打开状态 return (Boolean) method.invoke(wifiManager, apConfig, enabled); } catch (Exception e) { return false; } }}
首先,如果是一个新创建的Qt工程,需要创建一个AndroidManifest.xml文件,创建过程不再赘述,然后创建一个Java的类,继承于
public class MainActivity extends org.qtproject.qt5.android.bindings.QtActivity
先定义一个wifiHostBiz的对象
public WifiHostBiz wifiHostBiz;然后在onCreate中初始化该对象
wifiHostBiz = new WifiHostBiz(this);接下来定义一个公有的静态函数
/** *获取热点状态 */public static boolean isWifiApEnabled(){ return m_instance.wifiHostBiz.isWifiApEnabled();}
bool AndroidInterface::getWifiApStatus(){ bool ret = false; ret = QAndroidJniObject::callStaticMethod("com/lyy/test/MainActivity", "isWifiApEnabled", "()Z"); return ret;}
更多相关文章
- ListView点击效果设置
- 通过WifiManager,DhcpInfo获取android IP地址及网关等信息(两种
- android wifi状态机原理
- Android设备信息获取
- Android(安卓)如何让EditText不自动获取焦点
- android databinding的使用技巧
- Android(安卓)技术要点
- ListView点击效果设置
- Android(安卓)技术要点