首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式创建接入点

如何以编程方式创建接入点
EN

Stack Overflow用户
提问于 2012-10-17 11:37:02
回答 3查看 11.7K关注 0票数 20

我已经编写了为android设备创建接入点的代码。我已经在模拟器和真正的device.But上测试过了,它不工作。我哪里错了?

代码语言:javascript
复制
public class MainWAP extends Activity {

    WifiManager wifiManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_wap);
    }

    public void openWifi(View v) {
        createWifiAccessPoint();
    }

    private void createWifiAccessPoint() {
        if (wifiManager.isWifiEnabled()) {
            wifiManager.setWifiEnabled(false);
        }
        Method[] wmMethods = wifiManager.getClass().getDeclaredMethods();
        boolean methodFound = false;
        for (Method method: wmMethods) {
            if (method.getName().equals("setWifiApEnabled")) {
                methodFound = true;
                WifiConfiguration netConfig = new WifiConfiguration();
                netConfig.SSID = "AccessPoint";
                netConfig.allowedAuthAlgorithms.set(
                    WifiConfiguration.AuthAlgorithm.OPEN);
                try {
                    boolean apstatus = (Boolean) method.invoke(
                        wifiManager, netConfig, true);
                    for (Method isWifiApEnabledmethod: wmMethods) {
                        if (isWifiApEnabledmethod.getName().equals(
                                "isWifiApEnabled")) {
                            while (!(Boolean) isWifiApEnabledmethod.invoke(
                                    wifiManager)) {};
                            for (Method method1: wmMethods) {
                                if (method1.getName().equals(
                                        "getWifiApState")) {
                                    int apstate;
                                    apstate = (Integer) method1.invoke(
                                        wifiManager);
                                }
                            }
                        }
                    }
                    if (apstatus) {
                        Log.d("Splash Activity",
                            "Access Point created");
                    } else {
                        Log.d("Splash Activity",
                            "Access Point creation failed");
                    }

                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
            }
        }
        if (!methodFound) {
            Log.d("Splash Activity",
                "cannot configure an access point");
        }
    }
}
EN

回答 3

Stack Overflow用户

发布于 2012-11-09 20:36:44

您的WiFiManager肯定没有初始化。

在您的onCreate方法中添加以下内容:

代码语言:javascript
复制
wifiManager = (WiFiManager) getSystemService(Context.WIFI_SERVICE);
票数 7
EN

Stack Overflow用户

发布于 2013-04-16 20:18:51

要让这段代码正常工作,您只需要做几件事。

1)初始化wifiManager onCreate()

代码语言:javascript
复制
WifiManager wifiManager = (WiFiManager) getSystemService(Context.WIFI_SERVICE);

2)您需要在您的AndroidManifest.xml中请求此权限:

代码语言:javascript
复制
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />

3)您的应用程序需要使用系统证书签名。

票数 3
EN

Stack Overflow用户

发布于 2012-10-17 12:30:46

使用您使用反射利用未记录的API的方法,事情可能不会在所有情况下都能很好地工作。那么,您可以尝试将这些添加到您的清单文件中,并尝试一下。

代码语言:javascript
复制
android.permission.ACCESS_WIFI_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.WRITE_APN_SETTINGS 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12926738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档