Java 如何在以编程方式连接到Wifi时诊断android应用程序

Java 如何在以编程方式连接到Wifi时诊断android应用程序,java,android,android-studio,android-wifi,Java,Android,Android Studio,Android Wifi,我有一个没有身份验证且开放的接入点。它也没有连接到互联网。当我在手机设置中转到Wifi时,我可以将android手机连接到接入点,而不会出现任何问题。我只需点击接入点名称,手机就可以连接到它。但是,它会显示一条消息,表示无法访问Internet(这是正确的) 但是,当我尝试以编程方式执行相同的操作时,它不会连接到AP。我可以从时钟旁边的图标中看到,它在瞬间连接到AP,然后快速连接到最后一个已知良好的网络,即我的家庭网络 这是我的密码: package com.my_appconn; impor

我有一个没有身份验证且开放的接入点。它也没有连接到互联网。当我在手机设置中转到Wifi时,我可以将android手机连接到接入点,而不会出现任何问题。我只需点击接入点名称,手机就可以连接到它。但是,它会显示一条消息,表示无法访问Internet(这是正确的)

但是,当我尝试以编程方式执行相同的操作时,它不会连接到AP。我可以从时钟旁边的图标中看到,它在瞬间连接到AP,然后快速连接到最后一个已知良好的网络,即我的家庭网络

这是我的密码:

package com.my_appconn;

import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.net.wifi.WifiManager;
import android.net.wifi.ScanResult;
import android.content.BroadcastReceiver;

import java.util.ArrayList;
import java.util.List;

public class scandevices extends AppCompatActivity {

        WifiManager mainWifi;
        WifiReceiver receiverWifi;

        StringBuilder sb = new StringBuilder();

        private final Handler handler = new Handler();

        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.scandevices);
            TextView txtStatus =(TextView) findViewById(R.id.txtStatus);
            txtStatus.setText("Scanning...");
            mainWifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

            receiverWifi = new WifiReceiver();
            registerReceiver(receiverWifi, new IntentFilter(
                    WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
            if(mainWifi.isWifiEnabled()==false)
            {
                mainWifi.setWifiEnabled(true);
            }

            doInback();
        }

        public void doInback()
        {
            final TextView txtStatus =(TextView) findViewById(R.id.txtStatus);
            handler.postDelayed(new Runnable() {

                @Override
                public void run()
                {
                    // TODO Auto-generated method stub

                    receiverWifi = new WifiReceiver();
                    registerReceiver(receiverWifi, new IntentFilter(
                            WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
                    mainWifi.startScan();
                    doInback();
                    txtStatus.setText("Scanning...");
                }
            }, 2000);

        }

        @Override
        protected void onPause()
        {
            unregisterReceiver(receiverWifi);
            super.onPause();
        }

        @Override
        protected void onResume()
        {
            registerReceiver(receiverWifi, new IntentFilter(
                    WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
            super.onResume();
        }

        class WifiReceiver extends BroadcastReceiver
        {
            ListView resultView = (ListView) findViewById(R.id.lstWifiScanResult);
            ArrayAdapter<String> resultsAdaptr;
            TextView txtStatus =(TextView) findViewById(R.id.txtStatus);

            WifiScanResultsAdapter adapter;


            public void onReceive(Context c, Intent intent)
            {

                ArrayList<String> connections=new ArrayList<String>();
                ArrayList<Float> Signal_Strenth= new ArrayList<Float>();

                sb = new StringBuilder();
                List<ScanResult> wifiList;
                wifiList = mainWifi.getScanResults();

                for(int i = 0; i < wifiList.size(); i++)
                {
                    connections.add(wifiList.get(i).SSID);

                }
                txtStatus.setText("Scan done.");
                adapter = new WifiScanResultsAdapter(scandevices.this, connections);

                resultView.setAdapter(adapter);
                resultView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                   @Override
                   public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                        Integer netId;

                       WifiConfiguration wifiConfig= new WifiConfiguration();
                       wifiConfig.SSID = "\"" + adapter.getItem(i).toString() + "\"";

                       wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

                       netId= mainWifi.addNetwork(wifiConfig);
                       mainWifi.disconnect();
                       mainWifi.enableNetwork(netId, true);
                       mainWifi.reconnect();

                   }
               });

            }
        }
    }
package com.my_appconn;
导入android.content.Context;
导入android.content.Intent;
导入android.content.IntentFilter;
导入android.net.wifi.WifiConfiguration;
导入android.net.wifi.WifiManager;
导入android.os.Bundle;
导入android.os.Handler;
导入android.support.annotation.Nullable;
导入android.support.v7.app.AppActivity;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ListAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
导入android.net.wifi.WifiManager;
导入android.net.wifi.ScanResult;
导入android.content.BroadcastReceiver;
导入java.util.ArrayList;
导入java.util.List;
公共类丑闻扩展了AppCompative活动{
WifiManager mainWifi;
无线接收器接收器;
StringBuilder sb=新的StringBuilder();
私有最终处理程序=新处理程序();
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.scandevices);
TextView txtStatus=(TextView)findViewById(R.id.txtStatus);
setText(“扫描…”);
mainWifi=(WifiManager)getApplicationContext().getSystemService(Context.WIFI_服务);
receiverWifi=新WifiReceiver();
注册接收方(接收方、新意向过滤器)(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
if(mainWifi.isWifiEnabled()==false)
{
mainWifi.setWifiEnabled(true);
}
doInback();
}
公共void doInback()
{
最终TextView txtStatus=(TextView)findViewById(R.id.txtStatus);
handler.postDelayed(新的Runnable(){
@凌驾
公开募捐
{
//TODO自动生成的方法存根
receiverWifi=新WifiReceiver();
注册接收方(接收方、新意向过滤器)(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
mainWifi.startScan();
doInback();
setText(“扫描…”);
}
}, 2000);
}
@凌驾
受保护的void onPause()
{
未注册的接收器(接收器);
super.onPause();
}
@凌驾
受保护的void onResume()
{
注册接收方(接收方、新意向过滤器)(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
super.onResume();
}
类WifiReceiver扩展了BroadcastReceiver
{
ListView结果视图=(ListView)findViewById(R.id.lstWifiScanResult);
ArrayAdapter resultsAdaptr;
TextView txtStatus=(TextView)findViewById(R.id.txtStatus);
WifiScanResultsAdapter适配器;
接收时公共无效(上下文c,意图)
{
ArrayList connections=新建ArrayList();
ArrayList信号强度=新的ArrayList();
sb=新的StringBuilder();
列表wifiList;
wifiList=mainWifi.getScanResults();
对于(int i=0;i
我只是做了一点实验,我意识到每次我更改接入点SSID时,我的应用程序都会连接到它,而不会出现任何问题,但只会连接一次。如果我断开连接并再次尝试连接,我会遇到同样的问题。它会短暂连接,然后重新连接到我的家庭网络