无线扫描码

时间:2011-08-06 14:15:31

标签: android wifi emulation network-scan

这是我的代码:

package hu.wifx.droid;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.view.View;
import java.util.List;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;

public class WifXActivity extends Activity {

       TextView mText;
       WifiManager mWifi;
       List<ScanResult> wifiList;
       StringBuilder _sb = new StringBuilder();


   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       Button btn1 = (Button) findViewById(R.id.btn1);
       btn1.setOnClickListener(new View.OnClickListener()
       {
                       public void onClick(View arg0)
                       {
                               // TODO Auto-generated method stub
                               StartTester();
                       }
       });
   }

   public void StartTester()
   {
               IntentFilter i = new IntentFilter();
               i.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);

               mText = (TextView) findViewById(R.id.mainText);
               mWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
               registerReceiver(new BroadcastReceiver(){
                       public void onReceive(Context c, Intent i) {
                               WifiManager w = (WifiManager)c.getSystemService(Context.WIFI_SERVICE);
                               wifiList = w.getScanResults();

                               _sb = new StringBuilder();

                               for(int m = 0; m < wifiList.size(); m++)
                               {
                                       _sb.append((wifiList.get(m)).toString());
                                       _sb.append("\\n");
                               }

                               mText.setText(_sb);
                       }
               }, i);

               WifiManager WM = (WifiManager) getSystemService(Context.WIFI_SERVICE);
               WM.setWifiEnabled(true);
               WM.startScan();
         }
    }

没有错误, 但是当我启动模拟器并单击button1时:应用程序有 意外停了下来。 为什么呢?

2 个答案:

答案 0 :(得分:3)

请检查您是否在清单中添加了这些权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

答案 1 :(得分:0)

试试这个:

import java.util.ArrayList;
import java.util.HashMap;    
import java.util.List;    
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;    
import android.content.Intent;     
import android.content.IntentFilter;    
import android.net.wifi.ScanResult;    
import android.net.wifi.WifiConfiguration;   
import android.net.wifi.WifiManager;    
import android.os.Bundle;    
import android.util.Log;   
import android.view.View;    
import android.view.View.OnClickListener;    
import android.widget.AdapterView;    
import android.widget.Button;    
import android.widget.ListView;    
import android.widget.SimpleAdapter;    
import android.widget.TextView;    
import android.widget.Toast;

public class WiFiDemo extends Activity implements OnClickListener
 {      
    WifiManager wifi;       
    ListView lv;
    TextView textStatus;
    Button buttonScan;
    int size = 0;
    List<ScanResult> results;

    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);

        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(WiFiDemo.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));                    
    }

    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 + "  " + results.get(size).capabilities);

                arraylist.add(item);
                size--;
                adapter.notifyDataSetChanged();                 
            } 
        }
        catch (Exception e)
        { }         
    }    
}