我有一个应用程序,我需要检测用户的Wifi连接,基于此,用户可以看到一些数据。关键是我希望在用户启动应用程序时在其他网络上收到通知,并在应用程序运行时移动到其他网络。让我做一个场景:
假设我有2个wifi,一个在我家里面,另一个在外面。启动应用程序时,我在屋内,因此显示给我的数据是“ABC”。现在当我搬到屋外时,我的应用程序应该发出通知并杀死活动,因此当我在家外时,我不应该看到相同的数据“ABC”。
答案 0 :(得分:1)
每次用户更改连接时,您都可以在BroadcastReceiver中捕获。
首先,您需要在AndroidManifest.xml中声明以下权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
创建BroadcastReceiver
public class BrodcastNetwork extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Write your code here
}
}
将过滤器应用于BroadcastReceiver
<receiver android:name="com.example.datausage.BrodcastNetwork" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" >
</action>
</intent-filter>
</receiver>
答案 1 :(得分:1)
按如下方式编写BroadcastReceiver
public class TheBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
NetworkInfo datainfo = intent
.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (datainfo != null)
{
if (datainfo.getType() == ConnectivityManager.TYPE_WIFI)
{
//have different network states here
if (datainfo.getState() == datainfo.State.CONNECTING || datainfo.getState() == datainfo.State.CONNECTED) {
//work accordingly
}
}
}
}
}
注册BroadcastReceiver并在清单
注册这些条目 <receiver android:name="yours package details like com.a.b.c.TheBroadcastReceiver " >
<intent-filter>
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
在清单
中添加以下权限集 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
另请访问http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
答案 2 :(得分:0)