web-dev-qa-db-ja.com

Android sdkのネットワークイベントのインテントアクション

ネットワーク接続、切断などのネットワークアクションのブロードキャストを受信する必要があります。この目的でブロードキャストレシーバーを使用しています。誰も私が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..
    }
}
}

また、ネットワーク状態にアクセスするための許可も追加しました。

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />

マニフェストファイルでこのクラスを宣言した方法は次のとおりです。

<receiver class=".NetworkStateReceiver" Android:name=".NetworkStateReceiver">
    <intent-filter>
            <action Android:name="Android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
    </intent-filter>
</receiver>

ネットワークイベントをキャッチする他の方法がある場合は、間違っている場合は正しいインテントアクションを提案してくださいOR.

38
mudit

これが実際の例です:

<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>

public class ConnectivityReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(ConnectivityReceiver.class.getSimpleName(), "action: "
                + intent.getAction());
    }

}
51
yanchenko

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;    
    }
}
5
Ravi K. Sharma