java - Android - why the app crash when the service receive a call and the app is closed? -


i making app make happen when phone gets call, after lot of searching discover can use broadcastreceiver , service created service called phonestateservice:

import android.app.service; import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.content.intentfilter; import android.os.ibinder; import android.telephony.telephonymanager; import android.widget.toast;  public class phonestateservice extends service {      private static broadcastreceiver broadcastreceiver;      @override     public ibinder onbind(intent arg0) {         return null;     }      @override     public void oncreate() {         registerbroadcastreceiver();     }      @override     public void ondestroy() {         unregisterreceiver(broadcastreceiver);         broadcastreceiver = null;     }      private void registerbroadcastreceiver() {         broadcastreceiver = new broadcastreceiver() {             @override             public void onreceive(context context, intent intent) {                 string statestr = intent.getextras().getstring(telephonymanager.extra_state);                 if(statestr.equals(telephonymanager.extra_state_ringing)){                     new phonestatehandler().onincomingcallstarted(context);                 }             }         };         intentfilter filter = new intentfilter(telephonymanager.action_phone_state_changed);         filter.addaction(intent.action_screen_off);         registerreceiver(broadcastreceiver, filter);     } } 

this code starting phonestateservice(inside mainactivity):

if(permissionchecker.checkselfpermission(this, manifest.permission.read_phone_state) == permissionchecker.permission_granted) {         startservice(new intent(getapplicationcontext(), phonestateservice.class));     } 

part manifest file:

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

when phone gets call , app running (it's still didn't destroy) working after close app , phone gets call app crash , give me message app has stop working.

please tell me problem, didn't find answer.

edit:

the exception:

09-11 10:26:30.598 29461-29461/? e/androidruntime: fatal exception: main                                                process: com.multiplies.multiring, pid: 29461                                                java.lang.runtimeexception: error receiving broadcast intent { act=android.intent.action.screen_off flg=0x50000010 } in com.multiplies.multiring.service.phonestateservice$1@1924f18                                                    @ android.app.loadedapk$receiverdispatcher$args.run(loadedapk.java:891)                                                    @ android.os.handler.handlecallback(handler.java:739)                                                    @ android.os.handler.dispatchmessage(handler.java:95)                                                    @ android.os.looper.loop(looper.java:148)                                                    @ android.app.activitythread.main(activitythread.java:5417)                                                    @ java.lang.reflect.method.invoke(native method)                                                    @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:726)                                                    @ com.android.internal.os.zygoteinit.main(zygoteinit.java:616)                                                 caused by: java.lang.nullpointerexception: attempt invoke virtual method 'java.lang.string android.os.bundle.getstring(java.lang.string)' on null object reference                                                    @ com.multiplies.multiring.service.phonestateservice$1.onreceive(phonestateservice.java:36)                                                    @ android.app.loadedapk$receiverdispatcher$args.run(loadedapk.java:881)                                                    @ android.os.handler.handlecallback(handler.java:739)                                                     @ android.os.handler.dispatchmessage(handler.java:95)                                                     @ android.os.looper.loop(looper.java:148)                                                     @ android.app.activitythread.main(activitythread.java:5417)                                                     @ java.lang.reflect.method.invoke(native method)                                                     @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:726)                                                     @ com.android.internal.os.zygoteinit.main(zygoteinit.java:616)  

edit:

i did people said:

string statestr = intent.getextras() != null ? intent.getextras().getstring(telephonymanager.extra_state) : ""; 

put doesn't fix problem. thought won't work because if intent.getextras() returning null, if statement won't work because it's returning null , it's want telephonymanager.extra_state_ringing:

if(statestr.equals(telephonymanager.extra_state_ringing)){                 new phonestatehandler().onincomingcallstarted(context); } 

but thank help.

huge edit:

part of manifest:

<service android:name=".phonestate.phonestateservice" />     <receiver android:name=".phonestate.phonestatebroadcast">     <intent-filter>         <action android:name="android.intent.action.phone_state" />     </intent-filter>     </receiver> 

phonestatebroadcast:

    import android.app.service; import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.telephony.telephonymanager; import android.util.log;  public class phonestatebroadcast extends broadcastreceiver {      context context;      public void onreceive(context context, intent intent) {         this.context = context;          try {              telephonymanager telephonymanager = (telephonymanager) context.getsystemservice(service.telephony_service);              switch (telephonymanager.getcallstate()) {                  case telephonymanager.call_state_ringing:                     context.startservice(new intent(context, phonestateservice.class));                     break;             }           } catch (exception e) {             log.e("phone receive error", " " + e);         }      } } 

phonestateservice:

    import android.app.intentservice; import android.content.intent;  public class phonestateservice extends intentservice {      public phonestateservice(string name) {         super(name);     }      @override     protected void onhandleintent(intent intent) {         new phonestatehandler().onincomingcallstarted(getapplicationcontext());     } } 

after edit still getting crash.

for reason extra's empty. doing intent.getextras().xxx intent.getextras() returns null, calling .xxx on throws error.

changing

string statestr = intent.getextras().getstring(telephonymanager.extra_state); 

into

string statestr = intent.getextras() != null ? intent.getextras().getstring(telephonymanager.extra_state) : ""; 

will stop crash happening, might want reason why expect extra's there aren't in intent.


Comments

Popular posts from this blog

Sort a complex associative array in PHP -

vb.net - How to ignore if a cell is empty nothing -

recursion - Can every recursive algorithm be improved with dynamic programming? -