android 平板右下角WIFI无信号问题

简介: android 平板右下角WIFI无信号问题

问题描述:


      android平板状态栏整合到了屏幕右下角, 我们在使用某些WIFI模块的时候会发现, WIFI热点扫描后, 可以看到热点有信号显示, 但是, 在连接上热点后, 右下角却始终没有信号格显示。



原因分析:


      在WIFI连接后, 状态栏一直接收不到信号值变化的广播, 导致无法获取到WIFI信号值。至于为何收不到, 应该就跟模块和驱动有关了。


frameworks/base/packages/apps/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
            mWifiRssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200);
            mWifiLevel = WifiManager.calculateSignalLevel(
                    mWifiRssi, WifiIcons.WIFI_LEVEL_COUNT);
        }


解决办法:


      既然在扫描热点中有信号, 那么可以通过获取此信号来显示。


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.anson.wifirssi"
    android:versionCode="1"
    android:versionName="1.0" >
    <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_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        >
        <!-- activity
            android:name="com.anson.wifirssi.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-->
        <receiver android:name="com.anson.wifirssi.BootReceiver">
            <intent-filter android:priority="100">
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </receiver>
        <service android:name="com.anson.wifirssi.RSSIService"></service>
    </application>
</manifest>
package com.anson.wifirssi;
import java.util.List;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.NetworkInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.IBinder;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;
public class RSSIService extends Service {
  WifiManager wifiMgr = null;
  BroadcastReceiver receiver;
  String connectedSSID ="";
  int time = 0;
  boolean mWifiConnected;
  Handler h = new Handler(){
  public void handleMessage(android.os.Message msg) {
    showWifiState();
    h.sendEmptyMessageDelayed(0, 2000);
    if(time == 5){
    wifiMgr.startScan();
    time = 0;
    }
    time ++;
  };
  };
  @Override
  public void onCreate() {
  // TODO Auto-generated method stub
  super.onCreate();
  android.util.Log.d("RSSIService", "ALog 0925 > onCreate()-----------------------------------------");
  wifiMgr = (WifiManager)getSystemService(WIFI_SERVICE);
  h.sendEmptyMessageDelayed(0, 2000);
  IntentFilter filter = new IntentFilter();
  filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
  filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
  receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    alog(intent.getAction());
    if(WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())){
      final NetworkInfo networkInfo = (NetworkInfo)
                      intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
              mWifiConnected = networkInfo != null && networkInfo.isConnected();
              if(mWifiConnected){
                WifiInfo info = (WifiInfo) intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
               connectedSSID = info.getSSID();
              }
    }
    }
  };
  registerReceiver(receiver, filter);
  }
  @Override
  public void onStart(Intent intent, int startId) {
  // TODO Auto-generated method stub
  super.onStart(intent, startId);
  }
  @Override
  public IBinder onBind(Intent arg0) {
  // TODO Auto-generated method stub
  return null;
  }
  void showWifiState(){
  List<ScanResult> results = wifiMgr.getScanResults();
  if(results != null && results.size() > 0){
    for(ScanResult sr:results){
    if(mWifiConnected && sr.SSID.equals(connectedSSID)){
      Intent intent = new Intent(WifiManager.RSSI_CHANGED_ACTION);
      intent.putExtra(WifiManager.EXTRA_NEW_RSSI, sr.level);
      sendBroadcast(intent);
    }
    }
  }
  }
  void alog(String s){
  android.util.Log.d("RSSIService", "ALog 0925 > " + s + "-----------------------------------------");
  }
  public String getWifiState(int state){
  String result = "WIFI_STATE_UNKNOWN";
  switch(state){
  case WifiManager.WIFI_STATE_DISABLED:
    result = "WIFI_STATE_DISABLE";
    break;
  case WifiManager.WIFI_STATE_DISABLING:
    result = "WIFI_STATE_DISABLING";
    break;
  case WifiManager.WIFI_STATE_ENABLED:
    result = "WIFI_STATE_ENABLED";
    break;
  case WifiManager.WIFI_STATE_ENABLING:
    result = "WIFI_STATE_ENABLING";
    break;
  }
  return result;
  }
}


主要处理思路:


获取到热点信号后,通过广播发给状态栏。


相关文章
|
1月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
123 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
6月前
|
Android开发
Android 状态栏WiFi图标的显示逻辑
Android 状态栏WiFi图标的显示逻辑
160 0
|
6月前
|
Android开发
Android获取当前连接的wifi名称
Android获取当前连接的wifi名称
327 6
|
6月前
|
编解码 Android开发
android 创建平板电脑模拟器(转)
android 创建平板电脑模拟器(转)
154 2
|
6月前
|
Ubuntu Android开发 数据安全/隐私保护
【Android平板编程】远程Ubuntu服务器Code-Server编程写代码
【Android平板编程】远程Ubuntu服务器Code-Server编程写代码
|
6月前
|
Android开发
android连接指定wifi
android连接指定wifi
105 0
|
6月前
|
Java Android开发
Android 9在连接以太网情况下 还能连接WiFi
Android 9在连接以太网情况下 还能连接WiFi
62 0
|
6月前
|
Android开发
Android12 ethernet和wifi共存
Android12 ethernet和wifi共存
361 0
|
6月前
|
Java Shell Android开发
Android11 有线网和wifi优先级设置
Android11 有线网和wifi优先级设置
496 0
|
6月前
|
Java Android开发 开发者
rk3399 android以太网和wifi共存
rk3399 android以太网和wifi共存
196 0