如何在Android Oreo +中以编程方式获取WiFi热点状态

时间:2018-07-30 08:24:21

标签: android

我想知道是否有任何方法可以在Android Oreo(API 26及更高版本)中不使用反射来(打开或关闭)获取Wi-Fi热点状态,因为它在Android上不起作用P根据新的restrictions on non-sdk interfaces

我已经看到有些方法提供了使用反射禁用WiFi热点的功能,但是我想避免这种情况,只是能够知道是否启用了该热点。

谢谢!

1 个答案:

答案 0 :(得分:-1)

请查看以下代码。这将为您提供帮助

onChange

其中WIFI_AP_STATE是一个枚举,如下所示:

public class WifiApManager {
    private final WifiManager mWifiManager;

    public WifiApManager(Context context) {
        mWifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
    }

    /*the following method is for getting the wifi hotspot state*/

    public WIFI_AP_STATE getWifiApState() {
        try {
            Method method = mWifiManager.getClass().getMethod("getWifiApState");

            int tmp = ((Integer) method.invoke(mWifiManager));

            // Fix for Android 4
            if (tmp > 10) {
                tmp = tmp - 10;
            }

            return WIFI_AP_STATE.class.getEnumConstants()[tmp];
        } catch (Exception e) {
            Log.e(this.getClass().toString(), "", e);
            return WIFI_AP_STATE.WIFI_AP_STATE_FAILED;
        }
    }

    /**
     * Return whether Wi-Fi Hotspot is enabled or disabled.
     * 
     * @return {@code true} if Wi-Fi AP is enabled
     * @see #getWifiApState()
     */
    public boolean isWifiApEnabled() {
        return getWifiApState() == WIFI_AP_STATE.WIFI_AP_STATE_ENABLED;
    }

}