我的应用程序如何将网络更改为Android 6.0手机中的另一个WiFi?

时间:2016-05-09 08:21:08

标签: android

进程如下(在平台上测试android api level = 23一个android 6.0手机):

  1. 在我的应用中,我这样做:

    mWifiManager.addNetwork(wcg);
    boolean b = mWifiManager.enableNetwork(wcgID, true);
    

    但是b总是返回false;

    日志打印:

    Not authorized to remove network 
    ......
    Not authorized to update network  
    
  2. 然后我在WifiManager中尝试了一个方法(标记为@Hide):

    connect(int networkId, ActionListener listener) 
    

    通过reflectMethod,结果也失败了。打印为:

    java.lang.reflect.InvocationTargetException
    

2 个答案:

答案 0 :(得分:2)

这看起来像是一个合法的案例。

检查所有删除或更新呼叫正在使用的WifiStateMachine代码,尤其是recordUidIfAuthorized(第454行)。

如果我正确读取此权限,并非所有人都有权修改或删除网络配置。您必须是该配置的所有者(=此配置必须由您的流程首先提交)才能完成工作。

答案 1 :(得分:0)

在Lollipop中你应该尝试检查活动的ssid是否相同,否则禁用网络。

 int netId = mWifiManager.addNetwork(conf);
if (netId == -1) {
                    Log.d(this, "Failed to set the settings for  " + mNetworkSsidToConnect);
                    final List<WifiConfiguration> mWifiConfiguration = mWifiManager.getConfiguredNetworks();
                    for (int i = 0; i < mWifiConfiguration.size(); i++) {
                        String configSSID = mWifiConfiguration.get(i).SSID;
                        Log.d(this, "Config SSID" + configSSID + "Active SSID" + conf.SSID);
                        netId = mWifiConfiguration.get(i).networkId;
                        if (configSSID.equals(conf.SSID)) {
                            Log.d(this, "network id" + netId);
                            break;
                        } else {
            **/*If SSID is not same disable other network here */**
                            mWifiManager.disableNetwork(netId);
                        }
                    }
                }