приложение показывает принудительное закрытие только при загрузке эмулятора / телефона, поскольку широковещательный приемник показывает исключение

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

05-20 12:48:15.688: INFO/Andros:AnsTheCall:receiver(218): initialised the receiver
05-20 12:48:15.707: WARN/dalvikvm(218): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-20 12:48:15.827: ERROR/AndroidRuntime(218): FATAL EXCEPTION: main
05-20 12:48:15.827: ERROR/AndroidRuntime(218): java.lang.RuntimeException: Unable to start receiver com.andros.AnsTheCall.AnsTheCallReceiver: java.lang.NullPointerException
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2821)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at android.app.ActivityThread.access$3200(ActivityThread.java:125)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at android.os.Looper.loop(Looper.java:123)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at android.app.ActivityThread.main(ActivityThread.java:4627)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at java.lang.reflect.Method.invokeNative(Native Method)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at java.lang.reflect.Method.invoke(Method.java:521)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at dalvik.system.NativeStart.main(Native Method)
05-20 12:48:15.827: ERROR/AndroidRuntime(218): Caused by: java.lang.NullPointerException
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at com.andro.AnsTheCall.AnsTheCallReceiver.onReceive(AnsTheCallReceiver.java:37)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2810)
05-20 12:48:15.827: ERROR/AndroidRuntime(218):     ... 10 more

Пожалуйста помоги

public class AnsTheCallReceiver extends BroadcastReceiver {

public static final String TAG = "Andros:AnsTheCall:receiver";
public selectedTabType attentFlag = selectedTabType.TYPE_INVALID;

private Intent AnsTheCallServiceIntent = null;
public String contactName = null;
public String contactEmail = "";
public int PhoneNumberCount= 0;

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

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    // Check phone state
    String phone_state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    String phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
    String lastPhoneNumber = null;
    Log.i(TAG,"initialised the receiver");

    if (phone_state.equals(TelephonyManager.EXTRA_STATE_RINGING) && prefs.getBoolean("appEnabled", false)) {
        int is_starred = isStarred(context, phoneNumber);

person rjn123    schedule 20.05.2012    source источник
comment
опубликуйте свой код получателя BOOT_COMPLETED ..   -  person Tarun    schedule 20.05.2012
comment
спасибо за ответ .. теперь пост обновлен.   -  person rjn123    schedule 20.05.2012
comment
Является ли этот опубликованный код завершенным приемником загрузки? В этом случае intentExtras не будет содержать TelephonyManager.EXTRA_STATE, и ваша строка может быть нулевой bcz этого.   -  person Tarun    schedule 20.05.2012


Ответы (1)


Проверьте, что находится в com.andro.AnsTheCall.AnsTheCallReceiver.onReceive(AnsTheCallReceiver.java:37, это вызывает принудительное закрытие вашей службы.

12: 48: 15.827: ОШИБКА / AndroidRuntime (218): Вызвано: java.lang.NullPointerException 05-20 12: 48: 15.827: ОШИБКА / AndroidRuntime (218): в com.andro.AnsTheCall.AnsTheCallReceiver.onReceive (AnsTheCallReceiver. java: 37) 05-20 12:48: 15.827:

person Tarun    schedule 20.05.2012
comment
на com.andro.AnsTheCall.AnsTheCallReceiver.onReceive(AnsTheCallReceiver.java:37. У меня if (phone_state.equals(TelephonyManager.EXTRA_STATE_RINGING) && prefs.getBoolean("appEnabled", false)) {. Мне это нужно, так как я должен обнаружить звонок и ответить на него. он работает нормально, за исключением того, что приложение показывает диалоговое окно принудительного закрытия только при включении устройства. Но оно все еще хорошо работает на заднем плане даже после диалогового окна принудительного закрытия. :-) - person rjn123; 20.05.2012
comment
В случае загрузки ваш phone_state имеет значение null. Строка phone_state = intent.getStringExtra (TelephonyManager.EXTRA_STATE); имеет значение null в случае завершения загрузки. - person Tarun; 20.05.2012
comment
if(phone_state !=null && phoneNumber!=null) затем проверьте, if (phone_state.equals(TelephonyManager.EXTRA_STATE_RINGING) && prefs.getBoolean("appEnabled", false)) { вы можете написать свою собственную логику для этого нулевого сценария. - person Tarun; 20.05.2012