Broadcastreceiver для получения информации ServiceState

Кто-нибудь знает, как получить статус телефонной службы (IN_SERVICE, OUT_OF_SERVICE, EMERGENCY_ONLY, POWER_OFF) в Android.

Я надеялся, что будет указатель на вещание, чтобы определить изменения, но я ничего не могу найти. Я знаю, что есть слушатель, но я не уверен, как использовать его в своем приложении, поскольку он работает как служба, используя WakefulIntentService (bycommonsguy).

С чем-то вроде уровня заряда батареи (например, BATTERY_LOW, BATTERY_OKAY) это довольно просто, но я просто не могу разобрать аналогичные вещи для изменений в телефонных услугах.

    Зарегистрируйте приемник для

    public static final String ACTION_SERVICE_STATE_CHANGED = "android.intent.action.SERVICE_STATE"; 

    Когда вы получаете намерение на свой приемник, просто используйте ниже небольшой взлом из источника Android

     public void onReceive(Context context, Intent intent) { int state = intent.getExtras().getInt("state"); if(state == ServiceState.STATE_IN_SERVICE) { //Do whatever you want } } 

    Проверить источник состояния состояния службы http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/telephony/ServiceState.java#ServiceState.setFromNotifierBundle%28android .os.Bundle% 29

    Вы можете написать свой собственный BroadcastReceiver. Ваш получатель получит изменения в подключении и сообщит ваш желаемый экземпляр об изменении (например, ваш собственный CommunicationManager):

     public class ConnectivityReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i(getClass().getName(), "A change in network connectivity has occurred. Notifying communication manager for further action."); NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); if(info != null) { Log.v(getClass().getName(), "Reported connectivity status is " + info.getState() + "."); } CommunicationManager.updateConnectivityState(); // Notify connection manager } } 

    Например, здесь ваш экземпляр CommunicationManager, который будет уведомлен о возможностях подключения:

     protected static void updateConnectivityState() { boolean isConnected = false; if (_connec != null && (_connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) ||(_connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)){ isConnected = true; Log.i(CommunicationManager.class.getName(), "Device is connected to the network. Online mode is available."); }else if (_connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || _connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) { isConnected = false; Log.w(CommunicationManager.class.getName(), "Device is NOT connected to the network. Offline mode."); } _isConnected = isConnected; } 

    Дополнительную информацию о доступности подключений можно узнать в классе NetworkInfo .

    Не забудьте зарегистрировать разрешающую способность ACCESS_NETWORK_STATE в манифесте:

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

    Надеюсь, это поможет. С уважением