【问题标题】:How do I change the Portable Hotspot's SSID in Android programmatically?如何以编程方式更改 Android 中便携式热点的 SSID?
【发布时间】:2015-04-16 20:22:41
【问题描述】:

我要更改热点 SSID!有人可以帮忙吗?

来自Android turn On/Off WiFi HotSpot programmatically,这是我切换便携式热点的代码:

import android.content.*;import android.net.wifi.*;
import java.lang.reflect.*;

public class ApManager {

//check whether wifi hotspot on or off
public static boolean isApOn(Context context) {
WifiManager wifimanager = (WifiManager)  context.getSystemService(context.WIFI_SERVICE);     
try {
    Method method = wifimanager.getClass().getDeclaredMethod("isWifiApEnabled");
    method.setAccessible(true);
    return (Boolean) method.invoke(wifimanager);
}
catch (Throwable ignored) {}
return false;
}

// toggle wifi hotspot on or off
public static boolean configApState(Context context) {
WifiManager wifimanager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
WifiConfiguration wificonfiguration = null;
try {  
    // if WiFi is on, turn it off
    if(isApOn(context)) {               
        wifimanager.setWifiEnabled(false);
    }               
    Method method = wifimanager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);                   
    method.invoke(wifimanager, wificonfiguration, !isApOn(context));
    return true;
} 
catch (Exception e) {
    e.printStackTrace();
}       
return false;
}
} // end of class

【问题讨论】:

    标签: android android-wifi wifimanager wifi


    【解决方案1】:

    寻找线索的最佳位置是 AOSP 源代码本身。以下是相关部分:http://androidxref.com/4.4_r1/xref/frameworks/base/wifi/java/android/net/wifi/WifiManager.java#1147

    以下代码对我有用:

    public static boolean setHotspotName(String newName, Context context) { 
        try {
            WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
            Method getConfigMethod = wifiManager.getClass().getMethod("getWifiApConfiguration");
            WifiConfiguration wifiConfig = (WifiConfiguration) getConfigMethod.invoke(wifiManager);
    
            wifiConfig.SSID = newName;
    
            Method setConfigMethod = wifiManager.getClass().getMethod("setWifiApConfiguration", WifiConfiguration.class);
            setConfigMethod.invoke(wifiManager, wifiConfig);
    
            return true;
        }
        catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    

    不要忘记将以下行添加到您的AndroidManifest.xml

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    

    【讨论】:

    • 我忘了补充:当她意识到她的便携式热点名称在下次尝试绑定时莫名其妙地更改并且找不到通常的 SSID 时,您可能会激怒您的用户。在这里小心行事。
    • 但是你能告诉我在哪里打电话
    • 在哪里调用什么?每当您想更改热点 SSID 时,您都可以像上面给出的那样调用setHotspotName。确定决定希望这发生在哪里?
    • 对不起,它确实有效。我实际上对此进行了测试。请向我们详细说明为什么它对您不起作用,然后我们可能会提供帮助。
    • 如何开启热点安全?
    猜你喜欢
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    相关资源
    最近更新 更多