无线扫描器扫描20次

编程入门 行业动态 更新时间:2024-10-26 03:22:27
本文介绍了无线扫描器扫描20次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想使无线扫描仪为我的项目,做20扫描时,我打的扫描按钮。当我运行C其扫描的$ C $,但我不知道它会扫描20次或没有,RSSI值/ WIFI水平不断变化。在日志中也说,你需要unregisterReciever。

I am trying to make wifi scanner for my project which does 20 scan when I hit the scan button. When I run the code its scans but I dont know it scans for 20 times or not and the RSSI value/wifi level keeps changing. In log it also says that you need to unregisterReciever.

我MainActivity.java

My MainActivity.java

package com.example.scanner; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.wifi.ScanResult; import android.wifi.WifiInfo; import android.wifi.WifiManager; import android.os.Bundle; import android.os.Environment; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { WifiManager wifi; WifiScanReceiver wifireciever; WifiInfo info; Button scan, save; List<ScanResult> wifilist; ListView list; String wifis[]; String name; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_main); list=(ListView)findViewById(R.id.listView1); scan=(Button)findViewById(R.id.button1); save=(Button)findViewById(R.id.button2); scan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub wifi=(WifiManager)getSystemService(Context.WIFI_SERVICE); if (wifi.isWifiEnabled()==false){ wifi.setWifiEnabled(true); } wifireciever = new WifiScanReceiver(); registerReceiver(wifireciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); } }); save.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub savedata(); } }); } protected void savedata() { // TODO Auto-generated method stub try { File sdcard = Environment.getExternalStorageDirectory(); File directory = new File(sdcard.getAbsolutePath() + "/WIFI_RESULT"); directory.mkdirs(); name = new SimpleDateFormat("yyyy-MM-dd HH mm ss").format(new Date()); File file = new File(directory,name + "wifi_data.txt"); FileOutputStream fou = new FileOutputStream(file); OutputStreamWriter osw = new OutputStreamWriter(fou); try { for (int i =0; i < list.getCount(); i++){ osw.append(list.getItemAtPosition(i).toString()); } osw.flush(); osw.close(); Toast.makeText(getBaseContext(), "Saved", Toast.LENGTH_LONG).show(); } catch (IOException e){ e.printStackTrace(); } } catch (FileNotFoundException e){ e.printStackTrace(); } } public class scan_data { String ssid; String bssid; int lvl; int count = 0; } class WifiScanReceiver extends BroadcastReceiver { @SuppressLint("UseValueOf") public void onReceive(Context c, Intent intent) { scan_data[] data = new scan_data[100]; for (int i=0;i<100;i++){ scan_data sdata = new scan_data(); data[i]=sdata; } int a =0; for (int i=0;i<20;i++){ wifi.startScan(); List<ScanResult> wifilist = wifi.getScanResults(); if (a<wifilist.size()){ a=wifilist.size(); } if (i==0){ for(int j=0;j<wifilist.size();j++){ data[j].ssid=wifilist.get(j).SSID.toString(); data[j].bssid=wifilist.get(j).BSSID.toString(); data[j].lvl=wifilist.get(j).level; data[j].count++; } } else if (i==19){ for (int j=0;j<wifilist.size();j++){ if(data[j].bssid.equals(wifilist.get(j).BSSID)){ data[j].lvl=data[j].lvl + wifilist.get(j).level; data[j].count++; } data[j].lvl=data[j].lvl/data[j].count; } } else { for (int j=0;j<wifilist.size();j++){ if(data[j].bssid.equals(wifilist.get(j).BSSID)){ data[j].lvl=data[j].lvl + wifilist.get(j).level; data[j].count++; } } } } wifis = new String[a]; for (int i =0; i<a; i++){ wifis[i] = ("\n" + data[i].ssid + "\n AP Address" + data[i].bssid + "\n Signal Strength:" + data[i].lvl).toString(); } list.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,wifis)); } } protected void onPause() { unregisterReceiver(wifireciever); super.onPause(); } protected void onResume() { registerReceiver(wifireciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); super.onResume(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }

和日志猫是:

06-05 17:42:43.262: D/dalvikvm(32156): GC_FOR_ALLOC freed 117K, 11% free 6899K/7687K, paused 35ms, total 35ms 06-05 17:42:43.312: I/dalvikvm-heap(32156): Grow heap (frag case) to 13.478MB for 6400016-byte allocation 06-05 17:42:43.412: D/dalvikvm(32156): GC_CONCURRENT freed 1K, 6% free 13148K/13959K, paused 33ms+2ms, total 103ms 06-05 17:42:43.412: D/dalvikvm(32156): WAIT_FOR_CONCURRENT_GC blocked 8ms 06-05 17:42:43.532: D/AbsListView(32156): Get MotionRecognitionManager 06-05 17:42:43.642: D/libEGL(32156): loaded /system/lib/egl/libGLES_rhea.so 06-05 17:42:43.662: D/BRCM_EGL(32156): eglCreateContext() config: 19 context: 0x4a12ca38, VC context 1, Thread 32156 06-05 17:42:43.662: D/BRCM_EGL(32156): eglCreateWindowSurface() surface: 0x4a240960, VC surface: 1, Thread: 32156 06-05 17:42:43.662: D/BRCM_EGL(32156): eglMakeCurrent(0x4a12ca38, 0x4a240960, 0x4a240960) Thread: 32156 06-05 17:42:43.672: D/OpenGLRenderer(32156): Enabling debug mode 0 06-05 17:43:39.937: D/BRCM_EGL(32156): eglMakeCurrent(NULL) Thread: 32156 06-05 17:43:39.937: D/BRCM_EGL(32156): eglDestroySurface() surface: 0x4a240960, android window 0x4908d370, Thread: 32156 06-05 17:43:40.457: D/BRCM_EGL(32156): eglMakeCurrent(0x4a12ca38, 0x4a2cbf60, 0x4a2cbf60) Thread: 32156 06-05 17:43:40.478: D/BRCM_EGL(32156): eglMakeCurrent(NULL) Thread: 32156 06-05 17:43:40.488: D/BRCM_EGL(32156): eglMakeCurrent(0x4a12ca38, 0x4a2cbf60, 0x4a2cbf60) Thread: 32156 06-05 17:43:40.488: D/BRCM_EGL(32156): eglMakeCurrent(NULL) Thread: 32156 06-05 17:43:40.508: E/ActivityThread(32156): Activity com.example.scanner.MainActivity has leaked IntentReceiver com.example.scanner.MainActivity$WifiScanReceiver@41640c78 that was originally registered here. Are you missing a call to unregisterReceiver()? 06-05 17:43:40.508: E/ActivityThread(32156): android.app.IntentReceiverLeaked: Activity com.example.scanner.MainActivity has leaked IntentReceiver com.example.scanner.MainActivity$WifiScanReceiver@41640c78 that was originally registered here. Are you missing a call to unregisterReceiver()? 06-05 17:43:40.508: E/ActivityThread(32156): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:793) 06-05 17:43:40.508: E/ActivityThread(32156): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:593) 06-05 17:43:40.508: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1314) 06-05 17:43:40.508: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1301) 06-05 17:43:40.508: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1295) 06-05 17:43:40.508: E/ActivityThread(32156): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:394) 06-05 17:43:40.508: E/ActivityThread(32156): at com.example.scanner.MainActivity$1.onClick(MainActivity.java:64) 06-05 17:43:40.508: E/ActivityThread(32156): at android.view.View.performClick(View.java:4262) 06-05 17:43:40.508: E/ActivityThread(32156): at android.view.View$PerformClick.run(View.java:17421) 06-05 17:43:40.508: E/ActivityThread(32156): at android.os.Handler.handleCallback(Handler.java:615) 06-05 17:43:40.508: E/ActivityThread(32156): at android.os.Handler.dispatchMessage(Handler.java:92) 06-05 17:43:40.508: E/ActivityThread(32156): at android.os.Looper.loop(Looper.java:137) 06-05 17:43:40.508: E/ActivityThread(32156): at android.app.ActivityThread.main(ActivityThread.java:4947) 06-05 17:43:40.508: E/ActivityThread(32156): at java.lang.reflect.Method.invokeNative(Native Method) 06-05 17:43:40.508: E/ActivityThread(32156): at java.lang.reflect.Method.invoke(Method.java:511) 06-05 17:43:40.508: E/ActivityThread(32156): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 06-05 17:43:40.508: E/ActivityThread(32156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 06-05 17:43:40.508: E/ActivityThread(32156): at dalvik.system.NativeStart.main(Native Method) 06-05 17:43:40.518: E/ActivityThread(32156): Activity com.example.scanner.MainActivity has leaked IntentReceiver com.example.scanner.MainActivity$WifiScanReceiver@4167dca8 that was originally registered here. Are you missing a call to unregisterReceiver()? 06-05 17:43:40.518: E/ActivityThread(32156): android.app.IntentReceiverLeaked: Activity com.example.scanner.MainActivity has leaked IntentReceiver com.example.scanner.MainActivity$WifiScanReceiver@4167dca8 that was originally registered here. Are you missing a call to unregisterReceiver()? 06-05 17:43:40.518: E/ActivityThread(32156): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:793) 06-05 17:43:40.518: E/ActivityThread(32156): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:593) 06-05 17:43:40.518: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1314) 06-05 17:43:40.518: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1301) 06-05 17:43:40.518: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1295) 06-05 17:43:40.518: E/ActivityThread(32156): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:394) 06-05 17:43:40.518: E/ActivityThread(32156): at com.example.scanner.MainActivity$1.onClick(MainActivity.java:64) 06-05 17:43:40.518: E/ActivityThread(32156): at android.view.View.performClick(View.java:4262) 06-05 17:43:40.518: E/ActivityThread(32156): at android.view.View$PerformClick.run(View.java:17421) 06-05 17:43:40.518: E/ActivityThread(32156): at android.os.Handler.handleCallback(Handler.java:615) 06-05 17:43:40.518: E/ActivityThread(32156): at android.os.Handler.dispatchMessage(Handler.java:92) 06-05 17:43:40.518: E/ActivityThread(32156): at android.os.Looper.loop(Looper.java:137) 06-05 17:43:40.518: E/ActivityThread(32156): at android.app.ActivityThread.main(ActivityThread.java:4947) 06-05 17:43:40.518: E/ActivityThread(32156): at java.lang.reflect.Method.invokeNative(Native Method) 06-05 17:43:40.518: E/ActivityThread(32156): at java.lang.reflect.Method.invoke(Method.java:511) 06-05 17:43:40.518: E/ActivityThread(32156): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 06-05 17:43:40.518: E/ActivityThread(32156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 06-05 17:43:40.518: E/ActivityThread(32156): at dalvik.system.NativeStart.main(Native Method) 06-05 17:43:40.528: E/ActivityThread(32156): Activity com.example.scanner.MainActivity has leaked IntentReceiver com.example.scanner.MainActivity$WifiScanReceiver@416416e0 that was originally registered here. Are you missing a call to unregisterReceiver()? 06-05 17:43:40.528: E/ActivityThread(32156): android.app.IntentReceiverLeaked: Activity com.example.scanner.MainActivity has leaked IntentReceiver com.example.scanner.MainActivity$WifiScanReceiver@416416e0 that was originally registered here. Are you missing a call to unregisterReceiver()? 06-05 17:43:40.528: E/ActivityThread(32156): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:793) 06-05 17:43:40.528: E/ActivityThread(32156): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:593) 06-05 17:43:40.528: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1314) 06-05 17:43:40.528: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1301) 06-05 17:43:40.528: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1295) 06-05 17:43:40.528: E/ActivityThread(32156): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:394) 06-05 17:43:40.528: E/ActivityThread(32156): at com.example.scanner.MainActivity$1.onClick(MainActivity.java:64) 06-05 17:43:40.528: E/ActivityThread(32156): at android.view.View.performClick(View.java:4262) 06-05 17:43:40.528: E/ActivityThread(32156): at android.view.View$PerformClick.run(View.java:17421) 06-05 17:43:40.528: E/ActivityThread(32156): at android.os.Handler.handleCallback(Handler.java:615) 06-05 17:43:40.528: E/ActivityThread(32156): at android.os.Handler.dispatchMessage(Handler.java:92) 06-05 17:43:40.528: E/ActivityThread(32156): at android.os.Looper.loop(Looper.java:137) 06-05 17:43:40.528: E/ActivityThread(32156): at android.app.ActivityThread.main(ActivityThread.java:4947) 06-05 17:43:40.528: E/ActivityThread(32156): at java.lang.reflect.Method.invokeNative(Native Method) 06-05 17:43:40.528: E/ActivityThread(32156): at java.lang.reflect.Method.invoke(Method.java:511) 06-05 17:43:40.528: E/ActivityThread(32156): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 06-05 17:43:40.528: E/ActivityThread(32156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 06-05 17:43:40.528: E/ActivityThread(32156): at dalvik.system.NativeStart.main(Native Method) 06-05 17:43:40.538: E/ActivityThread(32156): Activity com.example.scanner.MainActivity has leaked IntentReceiver com.example.scanner.MainActivity$WifiScanReceiver@41641368 that was originally registered here. Are you missing a call to unregisterReceiver()? 06-05 17:43:40.538: E/ActivityThread(32156): android.app.IntentReceiverLeaked: Activity com.example.scanner.MainActivity has leaked IntentReceiver com.example.scanner.MainActivity$WifiScanReceiver@41641368 that was originally registered here. Are you missing a call to unregisterReceiver()? 06-05 17:43:40.538: E/ActivityThread(32156): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:793) 06-05 17:43:40.538: E/ActivityThread(32156): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:593) 06-05 17:43:40.538: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1314) 06-05 17:43:40.538: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1301) 06-05 17:43:40.538: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1295) 06-05 17:43:40.538: E/ActivityThread(32156): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:394) 06-05 17:43:40.538: E/ActivityThread(32156): at com.example.scanner.MainActivity$1.onClick(MainActivity.java:64) 06-05 17:43:40.538: E/ActivityThread(32156): at android.view.View.performClick(View.java:4262) 06-05 17:43:40.538: E/ActivityThread(32156): at android.view.View$PerformClick.run(View.java:17421) 06-05 17:43:40.538: E/ActivityThread(32156): at android.os.Handler.handleCallback(Handler.java:615) 06-05 17:43:40.538: E/ActivityThread(32156): at android.os.Handler.dispatchMessage(Handler.java:92) 06-05 17:43:40.538: E/ActivityThread(32156): at android.os.Looper.loop(Looper.java:137) 06-05 17:43:40.538: E/ActivityThread(32156): at android.app.ActivityThread.main(ActivityThread.java:4947) 06-05 17:43:40.538: E/ActivityThread(32156): at java.lang.reflect.Method.invokeNative(Native Method) 06-05 17:43:40.538: E/ActivityThread(32156): at java.lang.reflect.Method.invoke(Method.java:511) 06-05 17:43:40.538: E/ActivityThread(32156): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 06-05 17:43:40.538: E/ActivityThread(32156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 06-05 17:43:40.538: E/ActivityThread(32156): at dalvik.system.NativeStart.main(Native Method) 06-05 17:43:40.548: E/ActivityThread(32156): Activity com.example.scanner.MainActivity has leaked IntentReceiver com.example.scanner.MainActivity$WifiScanReceiver@41640ff0 that was originally registered here. Are you missing a call to unregisterReceiver()? 06-05 17:43:40.548: E/ActivityThread(32156): android.app.IntentReceiverLeaked: Activity com.example.scanner.MainActivity has leaked IntentReceiver com.example.scanner.MainActivity$WifiScanReceiver@41640ff0 that was originally registered here. Are you missing a call to unregisterReceiver()? 06-05 17:43:40.548: E/ActivityThread(32156): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:793) 06-05 17:43:40.548: E/ActivityThread(32156): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:593) 06-05 17:43:40.548: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1314) 06-05 17:43:40.548: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1301) 06-05 17:43:40.548: E/ActivityThread(32156): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1295) 06-05 17:43:40.548: E/ActivityThread(32156): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:394) 06-05 17:43:40.548: E/ActivityThread(32156): at com.example.scanner.MainActivity$1.onClick(MainActivity.java:64) 06-05 17:43:40.548: E/ActivityThread(32156): at android.view.View.performClick(View.java:4262) 06-05 17:43:40.548: E/ActivityThread(32156): at android.view.View$PerformClick.run(View.java:17421) 06-05 17:43:40.548: E/ActivityThread(32156): at android.os.Handler.handleCallback(Handler.java:615) 06-05 17:43:40.548: E/ActivityThread(32156): at android.os.Handler.dispatchMessage(Handler.java:92) 06-05 17:43:40.548: E/ActivityThread(32156): at android.os.Looper.loop(Looper.java:137) 06-05 17:43:40.548: E/ActivityThread(32156): at android.app.ActivityThread.main(ActivityThread.java:4947) 06-05 17:43:40.548: E/ActivityThread(32156): at java.lang.reflect.Method.invokeNative(Native Method) 06-05 17:43:40.548: E/ActivityThread(32156): at java.lang.reflect.Method.invoke(Method.java:511) 06-05 17:43:40.548: E/ActivityThread(32156): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 06-05 17:43:40.548: E/ActivityThread(32156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 06-05 17:43:40.548: E/ActivityThread(32156): at dalvik.system.NativeStart.main(Native Method)

我知道我为错过了unregistorReciever的事情,但在这里我要补充

I know I m missing the unregistorReciever thing but where should I add

推荐答案

更新:你可以看看我的演示使用Android设备,在这里你可以找到几个途径射频测量,这里:

Update: You can take a look at my demo for RF measurements using Android device, where you can found a couple of approaches, here:

github/panosvas/Measurements

在这里你可以找到无线网络的测量实现了一个又一个。我还创建了一个服务器,用于存储这些测量以及远程触发应用程序中使用UDP数据包,您可以在这里找到:

where you can find an implementation of WiFi measurements one after another. I have also created a Server for storing these measurements as well as a remote trigger app using UDP packets where you can find here:

github/panosvas/IndoorPositioningServer

有可能获得多次测量。你的做法是错误的,由于该for循环可能会在mseconds执行,并在Android中每个无线测量基于保持在设备上约5秒钟的事实。一种方法来实现你的目标如下:

It is possible to obtain multiple measurements. Your approach is wrong due to the fact that the for loop will be executed probably in mseconds and each wifi measurement in Android keeps approximately 5 seconds based on the device. One approach to achieve your goal is the following:

  • 创建一个非同步任务或调用startScan()任务
  • 在保持一个计数器和每个onRecieve触发时更新
  • 如果计数器未达到上限则onRecieve再次调用任务
  • 里面
  • 如果该计数器达到上限则onRecieve里面你不必再调用任务

请记住,为了得到你要等到每个测量完成,否则你将采取同样的测量重复正确的测量。

Keep in mind that in order to obtain correct measurements you have to wait until each measurement finishes otherwise you will take duplicates of the same measurement.

更多推荐

无线扫描器扫描20次

本文发布于:2023-08-07 06:47:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1317574.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:扫描器

发布评论

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

>www.elefans.com

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