2013-11-26 4 views
0

Это мой первый раз, когда вы используете широковещательные приемники, и я думал, что это будет немного более прямолинейно, чем это. У меня есть класс, глядя, как это:Использование Broadcastreceiver для изменения состояния сети

public class NetworkChangeReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    boolean isConnected = wifi != null && wifi.isConnectedOrConnecting() || mobile != null && mobile.isConnectedOrConnecting(); 
    if (isConnected) { 
     Log.d("Network Available ", "YES" + getResultCode()); 

    }else{ 
     Log.d("Network Available ", "NO" + getResultCode()); 

    } 
} 
} 

и я уже зарегистрировал его в моем приложении, как этот

 mReceiver = new NetworkChangeReceiver(); 
    registerReceiver(mReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

И это работает нормально, когда я отключить мой Wi-Fi, я получаю «НЕТ "в log.d .. Но как мне получить что-то" случиться "? Я хочу получить возвращаемое значение или что-то, с чем я могу работать, например if isConnected is false, а затем перезапустить активность или что-то еще. Я искал поисковые запросы в течение нескольких дней, пытаясь понять, что это такое и как они работают ... Пожалуйста, помогите!

ответ

0

Ну, метод имеет тип void, поэтому возвращаемое значение не может быть и речи. Кроме того, вызывающий класс будет BroadcastManager или LocalBroadcastManager, поэтому у вас не будет никакого доступа к потенциальному возвращаемому значению.

Вы можете зарегистрировать пользовательских слушателей внутри вашего BroadcastReceiver, но это будет означать сохранение ненужных ссылок.

Что я буду делать в вашей ситуации выпалить другой вещания с помощью пользовательских «действий» String в «NO» блок:

else{ 
    Log.d("Network Available ", "NO" + getResultCode()); 
    LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(YOUR_CUSTOM_ACTION_NAME)); 
} 

Регистрация слушателя для этого события везде, где необходимо и обрабатывать поведение там ,

Смежные вопросы