无法以编程方式连接到Android中的特定WiFi

时间:2016-02-02 05:36:25

标签: android connection android-wifi ssid

当我按下android中的按钮时,我使用以下代码检测并连接到特定的WiFi ssid。下面是代码。任何帮助将不胜感激。

ssid: - " myHotspot" &安培;密码: - " 12345678"


 Button b1 = (Button) findViewById(R.id.button); <br>
        b1.setOnClickListener(new View.OnClickListener() {
            <br><br>@Override
            <br>public void onClick(View v) {

                wifiConfiguration.SSID = "\"myHotspot\"";
                wifiConfiguration.preSharedKey ="\"12345678\"";
                WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);

                int netId = wifiManager.updateNetwork(wifiConfiguration);
               if (wifiManager.isWifiEnabled()) { //---wifi is turned on---
                    //---disconnect it first---
                    wifiManager.disconnect();

                } else { //---wifi is turned off---
                    //---turn on wifi---

                    wifiManager.setWifiEnabled(true);
                }
                wifiManager.enableNetwork(netId, true);
                wifiManager.reconnect();

            }
        });



我遇到的主要问题是我的手机连接到ssid,2-3秒后它失去连接并连接到我的家庭Wifi路由器(具有互联网连接)


注意: - 我尝试连接的ssid只是一个没有任何互联网连接的本地热点。
如果我尝试使用&#34; addNetwork(wifiConfiguration)&#34;它创建了多个同名的网络。那现在我该如何解决这个问题?!

1 个答案:

答案 0 :(得分:2)

我认为这里的问题是您在调用 Guid jobId = Guid.NewGuid(); int goodRows = 0, badRows = 0; DataTable bulkSimulatorData = new DataTable(); bulkSimulatorData.Columns.Add(new DataColumn("jobId", typeof(string))); bulkSimulatorData.Columns.Add(new DataColumn("Column1", typeof(string))); bulkSimulatorData.Columns.Add(new DataColumn("Column2", typeof(string))); bulkSimulatorData.Columns.Add(new DataColumn("Column3", typeof(string))); if (CDR.PostedFile != null && CDR.PostedFile.ContentLength > 0) { StreamReader csvReader = new StreamReader(CDR.PostedFile.InputStream); { string inputLine = ""; SimulatorCDR cdr = null; while ((inputLine = csvReader.ReadLine()) != null) { try { string[] values = inputLine.Split(new Char[] { ',' }); if (values.Length == 4) { bulkSimulatorData.Columns.Add(new DataColumn("Column4", typeof(string))); cdr = new SimulatorCDR(jobId, values[0].ToString(), values[1].ToString(), Convert.ToDecimal(values[2]), Convert.ToDecimal(values[3])); if (cdr.Save()) { bulkSimulatorData.Rows.Add(jobId, values[0].ToString(), values[1].ToString(), Convert.ToDecimal(values[2]), Convert.ToDecimal(values[3])); goodRows++; } else { badRows++; } } else { cdr = new SimulatorCDR(jobId, values[0].ToString(), values[1].ToString(), Convert.ToDecimal(values[2])); if (cdr.Save()) { bulkSimulatorData.Rows.Add(jobId, values[0].ToString(), values[1].ToString(), Convert.ToDecimal(values[2])); goodRows++; } else { badRows++; } } } catch(Exception ex) { } } csvReader.Close(); } } if (goodRows > 0) { string constring = ConfigurationManager.ConnectionStrings["DTH"].ConnectionString; string trafficType = Conversational.Checked ? "CONVO" : "DIALER"; using(SqlBulkCopy oSqlBulkCopy = new SqlBulkCopy(constring)) { oSqlBulkCopy.BatchSize = goodRows; oSqlBulkCopy.BulkCopyTimeout = 100000; oSqlBulkCopy.ColumnMappings.Add("JobID", "JobID"); oSqlBulkCopy.ColumnMappings.Add("Column1", "SourceNumber"); oSqlBulkCopy.ColumnMappings.Add("Column2", "DestNumber"); oSqlBulkCopy.ColumnMappings.Add("Column3", "Duration"); oSqlBulkCopy.DestinationTableName = "[RATESIM].[dbo].[CDR]"; oSqlBulkCopy.WriteToServer(bulkSimulatorData); } string sql = "exec RATESIM.dbo.spQueueRatingSimulatorJob '" + jobId + "', '" + Utils.sanitize(Name.Text) + "', '" + Email.Text + "', '" + Utils.sanitize(Phone.Text) + "', '" + trafficType + "'"; if (Utils.ExecuteSQL("DTH", sql, 100)) { Message.Text = "Parsed " + goodRows + " CDRs in " + (goodRows + badRows) + " lines. A report will be sent to your email address after processing is complete."; Message.CssClass = "did_success"; } } 后立即尝试enableNetwork。通常,根据设备的不同,开启wifi需要5-10秒,直到那时对wifiManager.setWifiEnabled(true)的任何呼叫都将丢失。因此,您连接到所需网络的呼叫会丢失,一旦打开wifi,您的设备就会连接到它记住的最后一个网络。

尝试创建一个循环,在其中继续检查是否wifiManager.enableNetwork并保持循环直到它返回true(显然wifiManager.isWifiEnabled() == true并且在AsyncTask中执行此操作或单独Thread.sleep())。只有在那之后才尝试拨打Thread