mud*_*dit 38 android intentfilter android-networking
我需要接收网络连接的广播,如网络连接,断开连接等.我正在使用广播接收器.任何人都可以告诉我我需要捕获哪些针对网络事件的意图行动,现在根据我在互联网上的搜索,我使用的是android.net.ConnectivityManager.CONNECTIVITY_ACTION.
这是我的广播接收器类:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class NetworkStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (intent.getAction().equals(
android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {
// do something..
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还添加了访问网络状态的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)
这是我在清单文件中声明此类的方法
<receiver class=".NetworkStateReceiver" android:name=".NetworkStateReceiver">
<intent-filter>
<action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
如果我错了或者有任何其他方式来捕获网络事件,请建议我正确的意图行动.
yan*_*nko 51
这是一个有效的例子:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver android:name=".receiver.ConnectivityReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
.
public class ConnectivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(ConnectivityReceiver.class.getSimpleName(), "action: "
+ intent.getAction());
}
}
Run Code Online (Sandbox Code Playgroud)
yanchenko的答案非常有用,我只是简化一点来获得连接状态,请修改onReceive如下:
public class ConnectivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(ConnectivityReceiver.class.getSimpleName(), "action: "
+ intent.getAction());
MyConstants.IS_NETWORK_AVAILABLE = haveNetworkConnection(context);
//IS_NETWORK_AVAILABLE this variable in your activities to check networkavailability.
}
private boolean haveNetworkConnection(Context context) {
boolean haveConnectedWifi = false;
boolean haveConnectedMobile = false;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;
}
return haveConnectedWifi || haveConnectedMobile;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38495 次 |
| 最近记录: |