-
12-11-2019 - |
题
我想设置listener在无线状态下侦听,任何人都可以帮助我使用我的代码吗
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
...
TelephonyManager wTelephonyManager;
...
wTelephonyManager=(TelephonyManager)getSystemService(Context.WIFI_SERVICE);
wTelephonyManager.listen(new PhoneL(),PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
//下面是我用的要监听wifi变化的事件,上面的代码都在onCreate{}
class PhoneL extends PhoneStateListener
{
public void onWifiStateChanged(int state, String nesto)
{
mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
//mWifi.isConnectedOrConnecting()
if(mWifi.isConnectedOrConnecting())
{
Toast.makeText(WifiActivity.this,"Ima WIFI",Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(WifiActivity.this,"! NEMA WIFI",Toast.LENGTH_LONG).show();
}
}
}
//任何人都可以帮助我创建一个侦听器,该侦听器将侦听wifi状态,并检查wifi是否已连接或连接,如果不是我想通过3g/4g启用数据包流量
解决方案
android系统要求在Data Traffic
未连接但存在问题时切换到生成扫描仪。
如果在屏幕关闭时关闭WiFi,它将在WiFi和3G网络之间不断变化,如果选择了在后台发送数据的应用程序,如果您没有无限数据计划,它将使用数据连接。。
另一个问题是当你在一个没有那么强大的WiFi信号的区域时,它将不断变化到数据流量,并且您将有浏览或其他任何问题。
第三个问题是电池,因为我听到的是,使用WiFi连接比数据更好(电池明智),在屏幕关闭时,一个附加请勿关闭WiFi。(甚至,我这样做)因为始终开启的WiFi上和WiFi上的转换为最昂贵的。因此,因此将其留给了Android系统。
其他提示
我也遇到了这个问题,这是我如何解决它的。
在我的活动onCreate(。.)我做到了
this.registerReceiver(mWifiStateChangedReceiver,new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
另外,我以这种方式创建了成员'mWifiStateChangedReceiver
private BroadcastReceiver mWifiStateChangedReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
switch (extraWifiState)
{
case WifiManager.WIFI_STATE_DISABLED:
case WifiManager.WIFI_STATE_DISABLING:
enableUI(false);
break;
case WifiManager.WIFI_STATE_ENABLED:
ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
while(conMan.getActiveNetworkInfo() == null || conMan.getActiveNetworkInfo().getState() != NetworkInfo.State.CONNECTED)
{
try
{
Thread.sleep(500);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
update();
enableUI(true);
break;
case WifiManager.WIFI_STATE_ENABLING:
break;
case WifiManager.WIFI_STATE_UNKNOWN:
break;
}
}
};
正如你所看到的,当我得到 WifiManager.WIFI_STATE_ENABLED
我另外测试网络是否真的连接,因为启用的WiFi并不意味着它已连接。至少这是我的猜测,这就是为什么我要等到网络真正连接起来。
如果您想收听信号力量,您也可以倾听:
WifiManager.RSSI_CHANGED_ACTION
不隶属于 StackOverflow