2011-03-27 11 views
26

मुझे पता है कि एंड्रॉइड वाईफ़ाई स्कैन कैसे प्राप्त करें लेकिन मैं उनमें से एक सूची एडाप्टर बनाने का सबसे अच्छा तरीका नहीं समझ सकता। मैं केवल स्कैन से टेक्स्ट 1 और टेक्स्ट 2 में एसएसआईडी और बीएसएसआईडी को बांधना चाहता हूं।मैं एंड्रॉइड वाईफ़ाई स्कैन परिणाम कैसे एक सूची में प्राप्त कर सकता हूं?

मैं

wifi.startScan(); 
     // get list of the results in object format (like an array) 
     List<ScanResult> results = wifi.getScanResults();` 

     // loop that goes through list 
     for (ScanResult result : results) { 
      Toast.makeText(this, result.SSID + " " + result.level, 
        Toast.LENGTH_SHORT).show(); 

और क्या कर रहे हैं के नमूने:

private void fillDataFromDb() { 
     Cursor scanCursor = Db.fetchAllScans(); 
     startManagingCursor(scanCursor);` 

     // Create an array to specify the fields we want to display in the list 
     // (only TITLE) 
     String[] from = new String[] { WifiDbAdapter.KEY_BSSID, 
       WifiDbAdapter.KEY_SSID }; 

     // and an array of the fields we want to bind those fields to (in this 
     // case just text1) 
     int[] to = new int[] { R.id.text1, R.id.text2 }; 

     // Now create a simple cursor adapter and set it to display 
     SimpleCursorAdapter scansdb = new SimpleCursorAdapter(this, 
       R.layout.scan_row, scanCursor, from, to); 
     setListAdapter(scansdb); 
    } 
+0

मैं कुछ कोड आप भी है देखना चाहते हैं । क्या आपको इस तरह के परिणाम मिल रहे हैं ?: सूची परिणाम = wifi.getScanResults(); – eternalmatt

+0

मैं पहले से ही टोस्ट संदेशों को प्राप्त करने के लिए ऐसा कर रहा हूं: 'wifi.startScan(); \t \t // ऑब्जेक्ट प्रारूप (जैसे सरणी) में परिणामों की सूची प्राप्त करें \t \t सूची परिणाम = wifi.getScanResults(); \t \t // पाश कि (ScanResult परिणाम: परिणाम) के लिए सूची \t \t माध्यम से चला जाता { \t \t \t Toast.makeText (यह, result.SSID + "" + result.level, \t \t \t \t \t टोस्ट .LENGTH_SHORT) .show(); ' –

+0

@eternalmatt हां यह बिल्कुल ठीक है कि मुझे परिणाम कैसे मिल रहे हैं और यह बहुत अच्छा काम करता है, बस यह नहीं पता कि सूची सूची में इसे कैसे बाध्य किया जाए –

उत्तर

70

इस कोड

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) getApplicationContext().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) 
     { }   
    }  
} 
प्रयास करें

WiFiDemo.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="16dp" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical" 
     android:orientation="horizontal"> 

     <TextView 
      android:id="@+id/textStatus" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Status" /> 

     <Button 
      android:id="@+id/buttonScan" 
      android:layout_width="wrap_content" 
      android:layout_height="40dp" 
      android:text="Scan" /> 
    </LinearLayout> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="20dp"></ListView> 
</LinearLayout> 

ListView- row.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="8dp"> 

    <TextView 
     android:id="@+id/list_value" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textSize="14dp" /> 
</LinearLayout> 

लिए Androi में इन अनुमति जोड़े dManifest.xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
+2

इस कोड के लिए बहुत बहुत धन्यवाद। आखिर में मैं वाईफाई लिस्टव्यू –

+1

@Android पर इतने दिनों तक अपने सिर को टक्कर देने के बाद काम करने के लिए कुछ जाता हूं: एंड्रॉइड: क्या आप मुझे पूरा कोड दे सकते हैं –

+0

@ पूजाबालकृष्णन: क्या आप मुझे पूरा कोड दे सकते हैं? –

7

लपेटें अपने List<ScanResult> के चारों ओर एक ArrayAdapterScanResult डेटा के साथ अपनी पंक्तियों को पॉप्युलेट करने के लिए getView() ओवरराइड करें। Here is a free excerpt मेरी पुस्तकों में से एक है जो इस तरह कस्टम ArrayAdapters बनाने के तरीके को कवर करता है।

+0

क्या आप मुझे इस प्रश्न का डेमो दे सकते हैं –

+0

पुस्तक प्रतीत होती है अच्छा। धन्यवाद – Robin

20

स्वीकार किए जाते हैं जवाब आप अपने AndroidManifest में निम्न अनुमतियों की आवश्यकता होगी के लिए इसके अलावा करने के लिए यह काम कर रहे हैं:

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

एक पूरा काम कर उदाहरण नीचे खोजें:

@Android से कोड बहुत अच्छा है, लेकिन कुछ मुद्दों, अर्थात् है:

  1. ListView कोड को पॉप्युलेट करना BroadCastReceiver की onReceive जहां केवल परिणाम उपलब्ध हो जाएगा के लिए ले जाया जाना चाहिए। मामले में परिणाम दूसरे प्रयास में प्राप्त किया जाता है।
  2. परिणाम प्राप्त होने के बाद ब्रॉडकास्ट रिसीवर को अनियंत्रित करने की आवश्यकता है।
  3. size = size -1 अनावश्यक लगता है।

एक काम उदाहरण के रूप में @Android के संशोधित कोड नीचे खोजें:

WifiScanner.java जो मुख्य गतिविधि

package com.arjunandroid.wifiscanner; 

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.WifiManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

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

public class WifiScanner extends Activity implements View.OnClickListener{ 


    WifiManager wifi; 
    ListView lv; 
    Button buttonScan; 
    int size = 0; 
    List<ScanResult> results; 

    String ITEM_KEY = "key"; 
    ArrayList<String> arraylist = new ArrayList<>(); 
    ArrayAdapter adapter; 

    /* Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     getActionBar().setTitle("Widhwan Setup Wizard"); 

     setContentView(R.layout.activity_wifi_scanner); 

     buttonScan = (Button) findViewById(R.id.scan); 
     buttonScan.setOnClickListener(this); 
     lv = (ListView)findViewById(R.id.wifilist); 


     wifi = (WifiManager) getApplicationContext().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 ArrayAdapter<>(this,android.R.layout.simple_list_item_1,arraylist); 
     lv.setAdapter(this.adapter); 

     scanWifiNetworks(); 
    } 

    public void onClick(View view) 
    { 
     scanWifiNetworks(); 
    } 

    private void scanWifiNetworks(){ 

     arraylist.clear(); 
     registerReceiver(wifi_receiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 

     wifi.startScan(); 

     Log.d("WifScanner", "scanWifiNetworks"); 

     Toast.makeText(this, "Scanning....", Toast.LENGTH_SHORT).show(); 

    } 

    BroadcastReceiver wifi_receiver= new BroadcastReceiver() 
    { 

     @Override 
     public void onReceive(Context c, Intent intent) 
     { 
      Log.d("WifScanner", "onReceive"); 
      results = wifi.getScanResults(); 
      size = results.size(); 
      unregisterReceiver(this); 

      try 
      { 
       while (size >= 0) 
       { 
        size--; 
        arraylist.add(results.get(size).SSID); 
        adapter.notifyDataSetChanged(); 
       } 
      } 
      catch (Exception e) 
      { 
       Log.w("WifScanner", "Exception: "+e); 

      } 


     } 
    }; 

} 

activity_wifi_scanner है।एक्सएमएल जो गतिविधि

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:padding="10dp" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
     android:id="@+id/wifilist" 
     android:layout_width="match_parent" 
     android:layout_height="312dp" 
     android:layout_weight="0.97" /> 


    <Button 
     android:id="@+id/scan" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_gravity="bottom" 
     android:layout_margin="15dp" 
     android:background="@android:color/holo_green_light" 
     android:text="Scan Again" /> 
</LinearLayout> 
जैसा कि ऊपर उल्लेख

इसके अलावा के लिए लेआउट फाइल है, AndroidManifest.xml में वाईफ़ाई अनुमतियां जोड़ने के लिए मत भूलना

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
संबंधित मुद्दे