Broadcastreceiver для получения информации ServiceState - PullRequest
4 голосов
/ 31 января 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 04 апреля 2012

Зарегистрировать получателя на

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

0 голосов
/ 31 января 2011

Вы можете написать свой собственный 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>

Надеюсь, это поможет.Привет

...