当前位置: 代码迷 >> Android >> android 平板右下角WIFI无信号有关问题
  详细解决方案

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

热度:51   发布时间:2016-04-28 07:55:10.0
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;	}}

?

主要处理思路:

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

?

?

? ? ?

  相关解决方案