Проблема с запуском PhoneStateListener с широковещательного приемника ON_BOOT_COMPLETED

#android

#Android

Вопрос:

Я пытаюсь перезапустить PhoneStateListener после перезагрузки телефона (если мой isRunning SharedPref равен true … т. е. прослушиватель был запущен до перезагрузки)

Вот мой код…

Eclipse выдает ошибку в строке: окончательный TelephonyManager TelephonyManager = (TelephonyManager)getSystemService(srvcName);

В нем говорится, что getSystemService (строка) не определена. Кто-нибудь знает почему? Тот же базовый код отлично работает в моем основном приложении.

 public class MyReceiver extends BroadcastReceiver {
    SharedPreferences mPrefs;

    String srvcName = Context.TELEPHONY_SERVICE;
    final TelephonyManager telephonyManager = (TelephonyManager)getSystemService(srvcName); 

    @Override
    public void onReceive(Context context, Intent intent) {


        mPrefs = context.getSharedPreferences("myAppPrefs", 0); 
        if(getRunning()){
             telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
        }

      }
  

Комментарии:

1. Что говорит logcat в это время? Кроме того, можете ли вы попробовать переместить вызов getSystemService в метод onRecieve

2. нет logcat, он не будет компилироваться. Кроме того, перемещение вызова getSystemService в onReceive не помогает … то же сообщение об ошибке в Eclipse.

Ответ №1:

Во-первых, он не будет компилироваться, потому что BroadcastReceiver это не Context .

Во-вторых, зарегистрированный в манифесте BroadcastReceiver не может зарегистрировать слушателя. Этот BroadcastReceiver объект и, вероятно, весь его процесс исчезнут через миллисекунды после onReceive() завершения.

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