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
Post a Comment