android 扫描了WiFi信号强度,如何将他们赋给数组?

Handler handler = new Handler() {

public void handleMessage(Message msg) {

if (msg.what == 1) {

String wserviceName = Context.WIFI_SERVICE;

WifiManager wm = (WifiManager) getSystemService(wserviceName);

            WifiInfo info = wm.getConnectionInfo();     
            int strength = info.getRssi();  
            int speed = info.getLinkSpeed();    
            String units = WifiInfo.LINK_SPEED_UNITS;    
            String ssid = info.getSSID();    

            tv  = (TextView) findViewById(R.id.textView1);  

            List<ScanResult> results = wm.getScanResults();  
            String otherwifi = "检测到AP点: \n\n";  


            int[] ap;
            ap = new int[10];
            for (ScanResult result : results) {
                if(result.SSID.equals("9#729"))
                {
                    //apname.append(result.SSID + "");
                    ap[0]=result.level*(-1);
                    d0=(float) (0.02*(java.lang.Math.pow(2.71828,(strength*-0.1))));
                }
                if(result.SSID.equals("YHY"))
                {
                    //apname.append(result.SSID + "");
                    ap[1]=result.level*(-1);
                    d1=(float) (0.02*(java.lang.Math.pow(2.71828,(strength*-0.1))));
                }
                if(result.SSID.equals("9#731"))
                {
                    //apname.append(result.SSID + "");
                    ap[2]=result.level*(-1);
                    d2=(float) (0.02*(java.lang.Math.pow(2.71828,(strength*-0.1))));
                }
                if(result.SSID.equals("TP-LINK_366388"))
                {
                    //apname.append(result.SSID + "");
                    ap[3]=result.level*(-1);
                    d3=(float) (0.02*(java.lang.Math.pow(2.71828,(strength*-0.1))));
                }

                //otherwifi += result.SSID  + ":  " + result.level*(-1) + "\n";  
                float A[][] = {{-7,0},{-7,12},{0,12}};
            float b[] = {(float) (java.lang.Math.pow(d3,2)-java.lang.Math.pow(d0,2)-12.25),
                    (float) ((java.lang.Math.pow(d3,2)-java.lang.Math.pow(d1,2)-10000)+23.75),
                    (float) ((java.lang.Math.pow(d3,2)-java.lang.Math.pow(d2,2)-10000)+36)};

           //float At[][] ={{-200,-200,0},{0,400,400}}; 
           float AtA1At[][] = {{(float) -0.095,(float) -0.048,(float) 0.048},
                               {(float) -0.028,(float) 0.028,(float) 0.056}};
           float zuobiao[] = {(float) ((-0.095*(java.lang.Math.pow(d3,2)-java.lang.Math.pow(d0,2)-12.25))+(-.048*((java.lang.Math.pow(d3,2)-java.lang.Math.pow(d1,2))+23.75))+(0.048*((java.lang.Math.pow(d3,2)-java.lang.Math.pow(d2,2))+36))),
                                       (float) ((-0.028*(java.lang.Math.pow(d3,2)-java.lang.Math.pow(d0,2)-12.25))+(0.028*((java.lang.Math.pow(d3,2)-java.lang.Math.pow(d1,2))+23.75)+(0.056*((java.lang.Math.pow(d3,2)-java.lang.Math.pow(d2,2))+36))))};

            otherwifi = "你现在的位置:\n\n"+"("+(int) ((-0.095*(java.lang.Math.pow(d3,2)-java.lang.Math.pow(d0,2)-12.25))+(-.048*((java.lang.Math.pow(d3,2)-java.lang.Math.pow(d1,2))+23.75))+(0.048*((java.lang.Math.pow(d3,2)-java.lang.Math.pow(d2,2))+36)))
                            +","+
                            (int) ((-0.028*(java.lang.Math.pow(d3,2)-java.lang.Math.pow(d0,2)-12.25))+(0.028*((java.lang.Math.pow(d3,2)-java.lang.Math.pow(d1,2))+23.75)+(0.056*((java.lang.Math.pow(d3,2)-java.lang.Math.pow(d2,2))+36))))
                            +")"+"\n\n"+d0+"\n\n"+d1+"\n\n"+d2+"\n\n"+d3+"\n\n";


            }
           //  double y =java.lang.StrictMath.pow(strength*-1,1.0/n);
            //+ " at " + String.valueOf(speed) + "   " + String.valueOf(units)
            //String text = "[现在连接到] " + ssid  + ". 强度 : " + ((strength)+200) + "\n\n" + "[距离AP点大致距离]:\n"+ 0.02*(java.lang.Math.pow(2.71828,(strength*-0.1)))+"米";  
            //otherwifi += "\n\n";  
            //otherwifi += text;  

            tv.setText(otherwifi);  
        }  
        super.handleMessage(msg);  
    };  
};




    我就想问,那个strength变量,第一个if判断成功后,他的值就不变了,导致后面几个wifi的强度都一样………………谁能教我怎么改一下…………

4个回答

没大看懂,不是很理解你的意思,
WifiInfo info = wm.getConnectionInfo();

int strength = info.getRssi();
这不是获得连接的wifi的信号强度么?不是本来就是一个定死的数值么?
ScanResult有一个方法getRssi可以后的扫描到的ap的信号强度,不知道这是不是你想要的?

leafact
Leafact 回复DiggieMon: 最近也在搞wifi,~~~~(>_<)~~~~
接近 5 年之前 回复
DiggieMon
DiggieMon 回复lollipoppp: 谢谢啦,这么耐心^_^
接近 5 年之前 回复
leafact
Leafact 回复DiggieMon: 我在想level 和 RSSi的区别,我发现可能你直接用level是可以定位的,下面是我在其他网上看到的信息
接近 5 年之前 回复
DiggieMon
DiggieMon 回复lollipoppp: 原来d0,d1,d2,d3是用来存储根据信号强弱得出的距离,我也把它改成数组了,float [] d
接近 5 年之前 回复
DiggieMon
DiggieMon 回复lollipoppp: 那个name[i]是String[] name = {"9#729","YHY","9#731","TP-LINK_366388"};
接近 5 年之前 回复
DiggieMon
DiggieMon 回复lollipoppp: for(i=0;i<4;i++) { for (ScanResult result : results) { if(result.SSID.equals(name[i])) { //apname.append(result.SSID + ""); ap[i]=result.level*(-1); d[i]=(float) (0.02*(java.lang.Math.pow(2.71828,(strength*-0.1)))); } } }我改成这样了……eclipse没报错,但是手机一运行就闪退了T.T
接近 5 年之前 回复
leafact
Leafact 回复DiggieMon: 感觉也没啥特别好的思路,要获得新的信号强度就必须重新连接把,但是一次扫描的结果要同时获得四次连接的ap的强度,感觉有点难啊
接近 5 年之前 回复
DiggieMon
DiggieMon 回复lollipoppp: 我在想有没有什么办法让strength在第一个if中赋完值后清空,在下一个if中获得一个新的强度来赋值,这样重复后把我要的4个信号强度全部得出来额……
接近 5 年之前 回复
leafact
Leafact 回复DiggieMon: 因为你就获取了一次之后,你可以每个10秒刷新一下重新获取一下数据,这样肯定实时变化的
接近 5 年之前 回复
DiggieMon
DiggieMon 我设置了一个定时器,每500ms执行扫描一次,通过检测四周路由器强度的变化,用最小二乘拟合后得到自己的大致坐标
接近 5 年之前 回复
DiggieMon
DiggieMon 额,我是想每个路由器都有一个强度,先匹配SSID后把它的强度赋给一个变量,后面计算用额;level是可以获取,但是它从第一次获取后就没变过,无论我在房间里面怎么走动都不变额,我就没法儿用这个数据来定位…………
接近 5 年之前 回复

跪求大神解答…………………………小弟新手+菜鸟,万分无助中………………………………

ScanResult 的Rssi貌似只有蓝牙有,wifi 的扫描结果只有一个level,说说你的想法,我没大理解

leafact
Leafact 回复DiggieMon: 你是想连一个运行一下,再连一个再运行一下,连四次然后进行定位么?你可以用广播接受来处理收到的消息,这样你切四次网,接收到四次广播,就能计算了
接近 5 年之前 回复
DiggieMon
DiggieMon 嗯嗯~~这是个室内wifi定位的程序,是根据四周路由器信号强度,用最小二乘拟合实现的,而四个角的路由器信号肯定是不一样大的,而这个strength只是获得了第一个路由的信号强度后就不变了,这可怎么办……我需要四个不同的强度额
接近 5 年之前 回复

android中scanResult.level获取到的level和Wi-Fi的RSSI值有没有区别?若没区别为什么level总为负而RSSI总为正?若有区别通过level能否得到RSSI?


网友回复:

网友回复:
RSSI = level - NoiceFloor

NoiceFloor一般取-96dBm

这样如果 level 是 -60dBm, RSSI 就是 36

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问