ANDROID : Как зарегистрироваться для изменения подключения из службы?

В моем приложении есть одна служба, которая обновляет все элементы графического интерфейса. Поэтому мне нужно зарегистрировать свою службу в CONNECTIVITY_CHANGE_ACTION. Таким образом, он может уведомлять обо всех действиях по обновлению графического интерфейса всякий раз, когда он получает какие-либо обновления соединения в виде широковещательной рассылки.

Для этого я объявил в своем сервисе широковещательный приемник общедоступного класса. Ниже приведены фрагменты кода.

public class BkgService extends Service{

public class ConnectionUpdater extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            NetworkInfo info = (NetworkInfo) ((ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

            if (info == null || !info.isConnected()) {

            }
            else{
                cd.setIsOnline(true,context);
            }

            Intent intent1 = new Intent();
            intent1.setAction(ACTION_GUI_UPDATE);
            sendBroadcast(intent1);
        }

}

в моем файле манифеста я объявил так

<service android:name=".BkgService" />

<receiver android:name="BkgService.ConnectionUpdater">
     <intent-filter>
         <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
     </intent-filter>
</receiver>

Я не получаю никакой ошибки для этого. Но я не получаю никаких широковещательных обновлений, когда я включаю/отключаю данные 3G в виртуальном устройстве. Пожалуйста, подскажите, что может быть не так? Правильно ли я делаю?


person Surjya Narayana Padhi    schedule 26.02.2012    source источник


Ответы (1)


Пытаться...

<receiver android:name=".BkgService$ConnectionUpdater">

Вы пропустили . перед BkgService, и имя внутреннего класса должно быть отделено от основного класса знаком $.

person Squonk    schedule 26.02.2012
comment
спасибо за ваше предложение. Я внес необходимые изменения. Я принимаю трансляцию. Но моя программа вылетает сразу после того, как я получаю трансляцию. Я получаю эту ошибку: 02-26 04:48:04.081: E/AndroidRuntime(1222): java.lang.RuntimeException: невозможно создать экземпляр получателя mt.android.app.BkgService$ConnectionUpdater: java.lang.InstantiationException: mt .android.app.BkgService$ConnectionUpdater - person Surjya Narayana Padhi; 26.02.2012
comment
Причиной вашего исключения может быть то, что ваш внутренний класс не является статическим, поэтому при создании экземпляра он ссылается на внешний класс. Таким образом, среда выполнения Android не может создать экземпляр без передачи ссылки на внешний класс. Попробуйте объявить свой внутренний класс как static. - person Lars Blumberg; 04.05.2014