设为首页 收藏本站
查看: 910|回复: 0

[经验分享] 自动刷新获取wifi信号强度,android

[复制链接]

尚未签到

发表于 2015-10-1 09:34:56 | 显示全部楼层 |阅读模式
  我还是挺有必要把这次解决bug的过程记录下来的。转自http://fecbob.pixnet.net/blog/post/39322597-android-%3E-wifi-%3E-%E6%8E%83%E6%8F%8F%E9%99%84%E8%BF%91wifi-和http://stackoverflow.com/questions/8717741/application-never-receives-rssi-changed-action。这是我的第一个android程序,对于其中的一些细节原理,还需要再研究。
  package com.example.wifi_scan;
  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.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
  public class MainActivity extends Activity {
    /** Called when the activity is first created. */
private TextView wifiText;  
    private WifiManager wifiManager;  
    private StringBuilder sb;  
    private List<ScanResult> wifiList;  
    private WifiReceiver wifiReceiver;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        sb = new StringBuilder();  
        wifiText = (TextView) findViewById(R.id.wifi);  
        wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);  
        wifiReceiver = new WifiReceiver();  
        registerReceiver(wifiReceiver, new IntentFilter(  
                WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));  
        wifiManager.startScan();  
        wifiText.setText("\nStarting Scan\n");
        
        
    }
   
    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        menu.add(0, 0, 0, "Refresh");  
        return super.onCreateOptionsMenu(menu);  
    }
   
    @Override  
    public boolean onMenuItemSelected(int featureId, MenuItem item) {  
        wifiManager.startScan();  
        wifiText.setText("Starting Scan");  
        return super.onMenuItemSelected(featureId, item);  
  
    }  
  
    @Override  
    protected void onPause() {  
        unregisterReceiver(wifiReceiver);  
        super.onPause();  
    }  
      
    @Override  
    protected void onResume() {  
        registerReceiver(wifiReceiver, new IntentFilter(  
                WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));  
        super.onResume();  
        
        WifiManager wifiMan = (WifiManager)getSystemService(Context.WIFI_SERVICE);
        wifiMan.startScan();
    }  
      
    private final class WifiReceiver extends BroadcastReceiver {  
        @Override  
        public void onReceive(Context context, Intent intent) {
         
        WifiManager wifiMan = (WifiManager)getSystemService(Context.WIFI_SERVICE);
        wifiMan.startScan();
         
            sb = new StringBuilder();  
            wifiList = wifiManager.getScanResults();  
            for (int i = 0; i < wifiList.size(); i++) {  
                sb.append(new Integer(i + 1).toString() + ".");  
                sb.append((wifiList.get(i)).toString()).append("\n\n");  
            }  
            wifiText.setText(sb.toString());  
        }  
    }
   
   
}
  
  之前其实有挺多网上的代码是可以采集wifi信号强度的,但是没有找到能够实现刷新的,所以我也很纳闷该怎么做。然后自己找到一个可以用button按钮来刷新的,发现是可以刷新的,仔细对比了下,发现是有个函数在起作用startScan,但是无论我用timer,handler机制还是用receiver机制都不行,然后看到这篇博客http://blog.iyunv.com/zd_1471278687/article/details/12158367下面的讨论,将SCAN_RESULTS_AVAILABLE_ACTION改成了RSSI_CHANGED_ACTION,但是发现状态还是没有变,接着我就继续Google了下wifimanager rssi changed action,然后找到了这个http://stackoverflow.com/questions/8717741/application-never-receives-rssi-changed-action,照着里面的方法,把receive改了下,发现就可以了!
  从这个解决问题的路线,坚定了想法是:可以找人帮忙,但是最终解决问题的永远是自己!
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-121179-1-1.html 上篇帖子: 阿旺wifi智能系统源码 下篇帖子: Android之把手机的3g流量共享出来让其他人连接这个wifi
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表