Намеренное действие для сетевых событий в 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>
Пожалуйста, предложите мне правильное намерение, если я ошибаюсь ИЛИ если есть какой-либо другой способ отловить сетевые события.
2 ответа
Вот рабочий пример:
<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());
}
}
Ответ Янченко очень полезен, я просто немного упрощаю, чтобы получить статус соединения, пожалуйста, измените 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;
}
}