android - prevent a Broadcast Receiver from being killed by recent apps -


in app,i'm using broadcast receiver detect arrived sms messages...
when app running,works well...
but after killed recent apps,when sms messagebody:"silent" arrived ,my app crashes...!
// silent action in sms broadcastreceiver ...

here code:

manifest:

<receiver android:name=".smsreceiver" >             <intent-filter android:priority="999">                 <action android:name="android.provider.telephony.sms_received" />             </intent-filter>         </receiver> 

broadcastreceiver:

public class smsreceiver extends broadcastreceiver { public static string sendertel; public static string messagebody;         @override     public void onreceive(context context, intent intent) {         object[] pdus = (object[]) intent.getextras().get("pdus");          smsmessage sms = smsmessage.createfrompdu((byte[]) pdus[0]);         sendertel = sms.getoriginatingaddress();         messagebody = sms.getmessagebody().tolowercase().trim();             if(messagebody.equals("silent")){             g.audiomanager.setringermode(audiomanager.ringer_mode_vibrate);             g.audiomanager.setringermode(audiomanager.ringer_mode_silent);             toast.maketext(g.currentactivity, "silent", toast.length_short).show();         }     } 

g :

public class g extends application {      public static context           context;     public static activity currentactivity;   @override     public void oncreate() {         super.oncreate();         context = getapplicationcontext();         audiomanager= (audiomanager) getbasecontext().getsystemservice(context.audio_service);     } } 

logcat:

 caused by: java.lang.nullpointerexception: attempt invoke virtual method 'android.content.res.resources android.content.context.getresources()' on null object reference 

so tried use service , alarm manager failed

intent intent = new intent(g.context, smsreceiver.class);         intent.addflags(intent.flag_activity_new_task);         pendingintent pendingintent = pendingintent.getbroadcast(g.context, 0, intent, pendingintent.flag_update_current);         g.alarmmanager.set(alarmmanager.rtc_wakeup, system.currenttimemillis() + 3000, pendingintent); 

i want keep broadcast recevier alive after app kill recent apps or force close...
necessary use service ...?


thank can provide

try changing:

toast.maketext(g.currentactivity, "silent", toast.length_short).show(); 

to

toast.maketext(context, "silent", toast.length_short).show(); 

the application being killed, not broadcastreceiver. receiver invoked when needed android. solution here use context provided method parameters instead of activity possible null.

if wanted show toast when app opened, consider adding check see if currentactivity null (assuming assigned onstart , cleaned onstop), or registering receiver in activity.


Comments

Popular posts from this blog

1111. appearing after print sequence - php -

excel - I can't get the attachement of the email PHP -

node.js - Express and Redis - If session exists for this user, don't allow access -