#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
. В качестве дополнительного бонуса вам не нужно будет получать управление во время загрузки, что экономит ваши разрешения и ускоряет перезагрузки на телефонах ваших пользователей.