Go to the documentation of this file.00001 package com.ros.turtlebot.apps.rocon;
00002
00003 import java.net.Inet4Address;
00004 import java.net.InetAddress;
00005 import java.net.NetworkInterface;
00006 import java.net.SocketException;
00007 import java.net.URI;
00008 import java.net.URISyntaxException;
00009 import java.util.Collection;
00010 import java.util.Collections;
00011 import java.util.List;
00012
00013 import org.apache.http.conn.util.InetAddressUtils;
00014 import org.ros.address.InetAddressFactory;
00015 import org.ros.android.RosActivity;
00016 import org.ros.exception.RosRuntimeException;
00017 import org.ros.node.NodeMainExecutor;
00018
00019 import com.google.common.collect.Lists;
00020
00021 import android.annotation.SuppressLint;
00022 import android.app.Activity;
00023 import android.content.BroadcastReceiver;
00024 import android.content.Context;
00025 import android.content.Intent;
00026 import android.content.IntentFilter;
00027 import android.content.SharedPreferences;
00028 import android.net.wifi.ScanResult;
00029 import android.net.wifi.WifiConfiguration;
00030 import android.net.wifi.WifiInfo;
00031 import android.net.wifi.WifiManager;
00032 import android.os.AsyncTask;
00033 import android.os.Build;
00034 import android.os.Bundle;
00035 import android.os.Vibrator;
00036 import android.util.Log;
00037 import android.view.View;
00038 import android.widget.EditText;
00039 import android.widget.TextView;
00040 import android.widget.Toast;
00041
00042 public class MainActivity extends Activity
00043 {
00044 private static final String PREFS_KEY_TABLE = "TABLE_KEY";
00045 private static final String PREFS_KEY_SSID = "SSID_KEY";
00046 private static final String PREFS_KEY_PW = "PW_KEY";
00047 private static final String PREFS_KEY_URI = "URI_KEY";
00048 private static final String PREFS_KEY_WEB = "WEB_KEY";
00049
00050 WifiManager wifiManager = null ;
00051 IntentFilter wifiFilter = null ;
00052 List<ScanResult> scanResults ;
00053 List<WifiConfiguration> configs ;
00054
00055 Intent rocon_intent = null ;
00056
00057 String nfc_table = "";
00058 String nfc_ssid = "";
00059 String nfc_password = "";
00060 String nfc_masteruri = "";
00061 String nfc_weblink = "";
00062
00063 EditText editTable = null ;
00064 EditText editSsid = null ;
00065 EditText editPassword = null ;
00066 EditText editMasterUri = null ;
00067 EditText editWebLink = null ;
00068
00069
00071 @Override
00072 public void onCreate(Bundle savedInstanceState)
00073 {
00074 super.onCreate(savedInstanceState);
00075 setContentView(R.layout.main);
00076
00077 wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
00078 wifiFilter = new IntentFilter();
00079 wifiFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
00080
00081
00082 if(!wifiManager.isWifiEnabled())
00083 wifiManager.setWifiEnabled(true);
00084
00085
00086
00087 configs = wifiManager.getConfiguredNetworks() ;
00088 wifiManager.startScan();
00089
00090
00091
00092
00093 editTable = (EditText) findViewById(R.id.table);
00094 editSsid = (EditText) findViewById(R.id.ssid);
00095 editPassword = (EditText) findViewById(R.id.pasword);
00096 editMasterUri = (EditText) findViewById(R.id.master_uri);
00097 editWebLink = (EditText) findViewById(R.id.web_link);
00098
00099 nfc_table = getPreferences(MODE_PRIVATE).getString(PREFS_KEY_TABLE, editTable.getText().toString());
00100 nfc_ssid = getPreferences(MODE_PRIVATE).getString(PREFS_KEY_SSID, editSsid.getText().toString());
00101 nfc_password = getPreferences(MODE_PRIVATE).getString(PREFS_KEY_PW, editPassword.getText().toString());
00102 nfc_masteruri = getPreferences(MODE_PRIVATE).getString(PREFS_KEY_URI, editMasterUri.getText().toString());
00103 nfc_weblink = getPreferences(MODE_PRIVATE).getString(PREFS_KEY_WEB, editWebLink.getText().toString());
00104
00105 editTable.setText(nfc_table);
00106 editSsid.setText(nfc_ssid);
00107 editPassword.setText(nfc_password);
00108 editMasterUri.setText(nfc_masteruri);
00109 editWebLink.setText(nfc_weblink);
00110 }
00111
00112
00113 @Override
00114 protected void onResume() {
00115
00116 super.onResume();
00117 if(wifiFilter != null)
00118 registerReceiver(wifiEventReceiver, wifiFilter);
00119 }
00120
00121 @Override
00122 protected void onPause() {
00123
00124 super.onPause();
00125 if(wifiFilter != null)
00126 unregisterReceiver(wifiEventReceiver);
00127 }
00128
00129
00130 private BroadcastReceiver wifiEventReceiver = new BroadcastReceiver() {
00131
00132 @Override
00133 public void onReceive(Context context, Intent intent) {
00134
00135 Log.d("MainActivity", "onReceive");
00136 if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
00137
00138 scanResults = wifiManager.getScanResults();
00139
00140
00141
00142
00143 }
00144 }
00145 };
00146
00147 public void onClick(View v) {
00148 switch(v.getId()) {
00149 case R.id.start_rocon :
00150 {
00151 nfc_table = editTable.getText().toString() ;
00152 nfc_weblink = editWebLink.getText().toString() ;
00153 nfc_ssid = editSsid.getText().toString() ;
00154 nfc_password = editPassword.getText().toString() ;
00155 nfc_masteruri = editMasterUri.getText().toString() ;
00156
00157 rocon_intent = new Intent(MainActivity.this, RoconMainActivity.class);
00158 rocon_intent.putExtra("table", nfc_table);
00159 rocon_intent.putExtra("weblink", nfc_weblink);
00160 rocon_intent.putExtra("masteruri", nfc_masteruri);
00161
00162 SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
00163 editor.putString(PREFS_KEY_TABLE, nfc_table);
00164 editor.putString(PREFS_KEY_SSID, nfc_ssid);
00165 editor.putString(PREFS_KEY_PW, nfc_password);
00166 editor.putString(PREFS_KEY_URI, nfc_masteruri);
00167 editor.putString(PREFS_KEY_WEB, nfc_weblink);
00168 editor.commit();
00169
00170 wifiConnect() ;
00171 startActivity(rocon_intent);
00172
00173 finish();
00174 }
00175 break ;
00176 }
00177 }
00178
00179 private void wifiConnect()
00180 {
00181 Log.d("MainActivity", "wifiConnect");
00182
00183 scanResults = wifiManager.getScanResults();
00184 if(scanResults == null || scanResults.size() == 0) {
00185 Toast.makeText(this, "No access point is found.", Toast.LENGTH_SHORT).show();
00186 return ;
00187 }
00188
00189 ScanResult foundResult = null ;
00190 for(ScanResult result : scanResults){
00191 if(nfc_ssid.equals(result.SSID)) {
00192 foundResult = result ;
00193 break ;
00194 }
00195 }
00196
00197 if( foundResult == null ) {
00198 Toast.makeText(this, "Sorry!" + nfc_ssid + " is not found!", Toast.LENGTH_SHORT).show();
00199 return ;
00200 }
00201
00202 configs = wifiManager.getConfiguredNetworks() ;
00203
00204 for(WifiConfiguration config : configs){
00205 if(("\"" + nfc_ssid + "\"").equals(config.SSID)) {
00206 wifiManager.enableNetwork(config.networkId, true);
00207 return ;
00208 }
00209 }
00210
00211 WifiConfiguration config = new WifiConfiguration() ;
00212 config.SSID = "\"" + foundResult.SSID + "\"" ;
00213 config.priority = 40 ;
00214
00215 if(foundResult.capabilities.contains("WPA")) {
00216 config.status = WifiConfiguration.Status.ENABLED ;
00217 config.preSharedKey = "\"" + nfc_password + "\"" ;
00218 } else if(foundResult.capabilities.contains("WEB")){
00219 config.wepKeys[0] = "\"" + nfc_password + "\"" ;
00220 config.wepTxKeyIndex = 0 ;
00221 } else {
00222 config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
00223 }
00224
00225 int newId = wifiManager.addNetwork(config);
00226 if(newId < 0) {
00227 Toast.makeText(this, "Sorry! Fail to add network " + nfc_ssid, Toast.LENGTH_SHORT).show();
00228 return ;
00229 }
00230 else {
00231 if(wifiManager.enableNetwork(newId, true)) {
00232 Toast.makeText(this, "Trying to connect to " + config.SSID, Toast.LENGTH_SHORT).show();
00233 wifiManager.saveConfiguration();
00234 }
00235 else {
00236 Toast.makeText(this, "Sorry! Fail to connect to " + nfc_ssid, Toast.LENGTH_SHORT).show();
00237 }
00238 }
00239 }
00240 }