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