एक पूरा काम कर उदाहरण नीचे खोजें:
@Android से कोड बहुत अच्छा है, लेकिन कुछ मुद्दों, अर्थात् है:
- ListView कोड को पॉप्युलेट करना BroadCastReceiver की onReceive जहां केवल परिणाम उपलब्ध हो जाएगा के लिए ले जाया जाना चाहिए। मामले में परिणाम दूसरे प्रयास में प्राप्त किया जाता है।
- परिणाम प्राप्त होने के बाद ब्रॉडकास्ट रिसीवर को अनियंत्रित करने की आवश्यकता है।
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" />
मैं कुछ कोड आप भी है देखना चाहते हैं । क्या आपको इस तरह के परिणाम मिल रहे हैं ?: सूची परिणाम = wifi.getScanResults(); –
eternalmatt
मैं पहले से ही टोस्ट संदेशों को प्राप्त करने के लिए ऐसा कर रहा हूं: '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(); ' –
@eternalmatt हां यह बिल्कुल ठीक है कि मुझे परिणाम कैसे मिल रहे हैं और यह बहुत अच्छा काम करता है, बस यह नहीं पता कि सूची सूची में इसे कैसे बाध्य किया जाए –