通过Android应用程序连接到WiFi

编程入门 行业动态 更新时间:2024-10-28 08:23:54
本文介绍了通过Android应用程序连接到WiFi的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我希望创建的应用程序,其检测所述可用无线连接的附近,并然后连接到它们。我现在所做的钱柜,是我创建了一个ListView控件,其中列出了可用的无线连接,然后我创建了一个LongItemClick对话框,显示SSID和网络的BSSID,并要求输入密码。现在,我希望连接到网络,独立它是什么样的网络,它可能是WEP,WPA或打开过的一个。我无法得到我应如何连接到它们的概述。谁能帮我这个?我找遍了所有可用的答案,我没有找到任何答案,这可以帮助我做到这一点!

I wish to create an application, that detects the available wifi connections in the vicinity, and then connects to them. What I have done till now, is that I created a ListView that lists the available wifi connections, and then I created a LongItemClick dialog box, that shows the SSID and the BSSID of the network, and asks for the password. Now, I wish to connect to one of the networks, independent of what kind of network it is, it might be WEP, WPA or Open too. I am unable to get an overview of how should I connect to them. Can anyone help me with this ? I searched all available answers, and I didn't find any answer, that could help me do this!

我尝试下面的方法上面的东西。我创建在附近所有可用的Wi-Fi网络的列表视图,然后我试图表明长preSS的连接信息,并提供一个选项,连接到通过点击点击的Wi-Fi网络。

I try the above thing by the below method. I create a list view of all the available wi-fi networks in the vicinity, and then I try to show the connection info on long press, and give an option to connect to the clicked wi-fi network via click.

code:

package com.example.random; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.FragmentManager; import android.app.ListActivity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.wifi.ScanResult; import android.wifi.WifiConfiguration; import android.wifi.WifiConfiguration.AuthAlgorithm; import android.wifi.WifiConfiguration.GroupCipher; import android.wifi.WifiConfiguration.KeyMgmt; import android.wifi.WifiConfiguration.PairwiseCipher; import android.wifi.WifiConfiguration.Protocol; import android.wifi.WifiManager; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends FragmentActivity implements OnClickListener { WifiManager wifi; ListView lv; // TextView textStatus; Button buttonScan; int size = 0; List<ScanResult> results; final Context context = this; EditText pass; String checkPassword = null; String ITEM_KEY = "key"; ArrayList<HashMap<String, String>> arraylist = new ArrayList<HashMap<String, String>>(); SimpleAdapter adapter; /* Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // textStatus = (TextView) findViewById(R.id.textStatus); buttonScan = (Button) findViewById(R.id.buttonScan); buttonScan.setOnClickListener(this); lv = (ListView)findViewById(R.id.list); lv.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub connectToWifi(arg2); } private void connectToWifi(final int position) { final Dialog dialog = new Dialog(context); dialog.setContentView(R.layout.connect); dialog.setTitle("Connect to Network"); TextView textSSID = (TextView) dialog.findViewById(R.id.textSSID); TextView textBSSID = (TextView) dialog.findViewById(R.id.textBSSID); TextView capabilities = (TextView) dialog.findViewById(R.id.textCapabilities); Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK); pass = (EditText) dialog.findViewById(R.id.textPassword); textSSID.setText(results.get(position).SSID); textBSSID.setText(results.get(position).BSSID); capabilities.setText(results.get(position).capabilities); // // if button is clicked, connect to the network; dialogButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { checkPassword = pass.getText().toString(); finallyConnect(checkPassword); dialog.dismiss(); } private void finallyConnect(String checkPassword) { String networkSSID = results.get(position).SSID; String networkPass = checkPassword; WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = String.format("\"%s\"", networkSSID); wifiConfig.preSharedKey = String.format("\"%s\"", networkPass); WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); //remember id int netId = wifiManager.addNetwork(wifiConfig); wifiManager.disconnect(); wifiManager.enableNetwork(netId, true); wifiManager.reconnect(); WifiConfiguration conf = new WifiConfiguration(); conf.SSID = "\"\"" + networkSSID + "\"\""; conf.preSharedKey = "\""+ networkPass +"\""; WifiManager wifiManager1 = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); wifiManager1.addNetwork(conf); // List<WifiConfiguration> list = wifiManager1.getConfiguredNetworks(); // for( WifiConfiguration i : list ) { // if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) { // wifiManager1.disconnect(); // // wifiManager1.enableNetwork(iworkId, true); // if(wifiManager1.reconnect()){ //// int ipAddress = wifiManager.getConnectionInfo().getIpAddress(); //// Toast.makeText(getApplicationContext(), ipAddress, Toast.LENGTH_SHORT).show(); // Toast.makeText(getApplicationContext(), networkSSID + " "+ "Connection successful", Toast.LENGTH_SHORT).show(); // } // else{ // Toast.makeText(getApplicationContext(), "Connection Failed", Toast.LENGTH_SHORT).show(); // } // // break; // // } // } } }); dialog.show(); } }); lv.setOnItemLongClickListener(new OnItemLongClickListener(){ @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub showWifiSettings(arg2); return true; } private void showWifiSettings(int arg2) { showDialogOfOptions(arg2); } private void showDialogOfOptions(int arg2) { // Create a custom Dialog final Dialog dialog = new Dialog(context); dialog.setContentView(R.layout.custom); dialog.setTitle("Network details"); TextView textSSID = (TextView) dialog.findViewById(R.id.textSSID); TextView textBSSID = (TextView) dialog.findViewById(R.id.textBSSID); Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK); textSSID.setText(results.get(arg2).SSID); textBSSID.setText(results.get(arg2).BSSID); // if button is clicked, close the custom dialog dialogButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); dialog.show(); } }); wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); if (wifi.isWifiEnabled() == false) { Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show(); wifi.setWifiEnabled(true); } this.adapter = new SimpleAdapter(MainActivity.this, arraylist, R.layout.row, new String[] { ITEM_KEY }, new int[] { R.id.list_value }); lv.setAdapter(this.adapter); registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context c, Intent intent) { results = wifi.getScanResults(); size = results.size(); } }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); } // protected void connectionStatus(String password) { // // TODO Auto-generated method stub // // // } public void onClick(View view) { arraylist.clear(); wifi.startScan(); Toast.makeText(this, "Scanning...." + size, Toast.LENGTH_SHORT).show(); try { size = size - 1; while (size >= 0) { HashMap<String, String> item = new HashMap<String, String>(); item.put(ITEM_KEY, results.get(size).SSID.toString()+ results.get(size).capabilities.toString()); arraylist.add(item); size--; adapter.notifyDataSetChanged(); } } catch (Exception e) { } } }

该应用程序运行良好,但它没有连接到任何WiFi网络。 任何帮助吗?

The application is running fine, but it does not connect to any of the Wifi networks. Any help please ?

推荐答案

您需要一个ScanResult确定由用户选择了无线网络配置的加密类型。

You need a ScanResult to determine the encryption type of the wifi configuration picked by the user.

在code以下工作正常,在我的应用程序,但不处理尚EAP加密类型。

The code below works fine in my app, except the EAP encryption type is not handled yet.

还有一件事,方法mWifiManager.reassociate()和mWifiManager.reconnect()似乎为我工作一样。

And one more thing, the method mWifiManager.reassociate( ) and mWifiManager.reconnect( ) seems work the same for me.

private void connectWifi( ScanResult sr , String pwd ) { WifiConfiguration config = new WifiConfiguration( ); config.allowedAuthAlgorithms.clear( ); config.allowedGroupCiphers.clear( ); config.allowedKeyManagement.clear( ); config.allowedPairwiseCiphers.clear( ); config.allowedProtocols.clear( ); config.SSID = "\"" + sr.SSID + "\""; if( sr.capabilities.contains( "WEP" ) ) { config.hiddenSSID = true; if( pwd.matches( "[0-9A-Fa-f]{64}" ) ) { config.preSharedKey = pwd; } else { config.preSharedKey = '"' + pwd + '"'; } config.allowedKeyManagement.set( KeyMgmt.NONE ); config.allowedAuthAlgorithms.set( WifiConfiguration.AuthAlgorithm.OPEN ); config.allowedAuthAlgorithms.set( WifiConfiguration.AuthAlgorithm.SHARED ); config.allowedGroupCiphers.set( WifiConfiguration.GroupCipher.CCMP ); config.allowedGroupCiphers.set( WifiConfiguration.GroupCipher.TKIP ); config.allowedGroupCiphers.set( WifiConfiguration.GroupCipher.WEP40 ); config.allowedGroupCiphers.set( WifiConfiguration.GroupCipher.WEP104 ); config.wepTxKeyIndex = 0; } else if( sr.capabilities.contains( "PSK" ) ) { config.preSharedKey = "\"" + pwd + "\""; config.hiddenSSID = true; config.allowedAuthAlgorithms.set( WifiConfiguration.AuthAlgorithm.OPEN ); config.allowedGroupCiphers.set( WifiConfiguration.GroupCipher.TKIP ); config.allowedKeyManagement.set( WifiConfiguration.KeyMgmt.WPA_PSK ); config.allowedPairwiseCiphers.set( WifiConfiguration.PairwiseCipher.TKIP ); config.allowedGroupCiphers.set( WifiConfiguration.GroupCipher.CCMP ); config.allowedPairwiseCiphers.set( WifiConfiguration.PairwiseCipher.CCMP ); config.status = WifiConfiguration.Status.ENABLED; } else if( sr.capabilities.contains( "EAP" ) ) { } else { config.allowedKeyManagement.set( KeyMgmt.NONE ); } int wcgID = mWifiManager.addNetwork( config ); mWifiManager.enableNetwork( wcgID , true ); // mWifiManager.reconnect( ); mWifiManager.reassociate( ); mWifiManager.saveConfiguration( ); } private final OnItemClickListener mOnItemClickListener = new OnItemClickListener( ) { @Override public void onItemClick( AdapterView< ? > parent , View view , int position , long id ) { final ScanResult sr = sortWifiList.get( position ); if( !mWifiInfo.getSSID( ).equals( "\"" + sr.SSID + "\"" ) ) { mConnectState = NO_CONNECT; refreshConnectViews( ); } connectImage = (ImageView)view.findViewById( R.id.wifi_connected ); connectTextView = (TextView)view.findViewById( R.id.wifi_info_state ); connectTextView.setTag( sr ); // connectTextView.setVisibility( View.VISIBLE ); // connectImage.setVisibility( View.VISIBLE ); // connectTextView.setText( R.string.wifi_connecting ); // connectImage.setBackground( refreshDrawable ); // connectImage.startAnimation( animation ); // TextView wifiSsid = (TextView)view.findViewById( R.id.wifi_ssid ); // wifiSsid.setPadding( 0 , 0 , 0 , 0 ); if( !mWifiInfo.getSSID( ).equals( "\"" + sr.SSID + "\"" ) ) { if( hasLocked( sr.capabilities ) ) { mWifiConfiguration = mWifiManager.getConfiguredNetworks( ); WifiConfiguration wc = hasSaved( sr ); // saved wifi , connect directly if( wc != null ) { connectWifi( wc ); } else { enterPasswordDialog( view , sr ); } } else { connectWifi( sr , "" ); } } autoRefresh = false; mScanner.pause( ); } }; private boolean hasLocked( String capabilities ) { if( capabilities.contains( "WEP" ) ) { return true; } else if( capabilities.contains( "PSK" ) ) { return true; } else if( capabilities.contains( "EAP" ) ) { return true; } return false; } private void connectWifi( WifiConfiguration wc ) { int wcgID = mWifiManager.addNetwork( wc ); mWifiManager.enableNetwork( wcgID , true ); // mWifiManager.reconnect( ); mWifiManager.reassociate( ); }

更多推荐

通过Android应用程序连接到WiFi

本文发布于:2023-11-01 17:28:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1549950.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:连接到   应用程序   Android   WiFi

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!