android sdk中网络事件的意图动作

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)

  • 此代码有效,但它只告诉您"连接更改"是否有办法判断它是连接还是已断开连接? (3认同)
  • 这个答案只是修复了清单中的intent动作名称.`android.net.ConnectivityManager.CONNECTIVITY_ACTION`的**值是`android.net.conn.CONNECTIVITY_CHANGE`,这是与意图动作匹配的那个. (2认同)

Rav*_*rma 5

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)

  • 这个代码的归属,看到Ravi忘了它:http://stackoverflow.com/a/4239410/182653 (2认同)