Perfom an action on getting specific text in SMS in Android -
i trying figure out how read incoming sms messages in android , perform specific task, ring alarm, when sms text 'ringalarm' comes in.
i figure out using broadcastreciever class read sms, how perform specific action when message pre-defined text arrives. can guide me class and/or method need use , how?
public class incomingsms extends broadcastreceiver { string key = mainactivity.keyword; //keyword variable in mainactivity. //i guess, mistake in accessing variable in incomingsms class. @override public void onreceive(context context, intent intent) { //---get sms message passed in--- bundle bundle = intent.getextras(); smsmessage[] msgs = null; string sms = null; string str = ""; if (bundle != null) { //---retrieve sms message received--- object[] pdus = (object[]) bundle.get("pdus"); msgs = new smsmessage[pdus.length]; (int i=0; i<msgs.length; i++){ msgs[i] = smsmessage.createfrompdu((byte[])pdus[i]); str += "sms " + msgs[i].getoriginatingaddress(); str += " :"; str += msgs[i].getmessagebody().tostring(); str += "\n"; sms = msgs[i].getmessagebody().tostring(); } //---display new sms message--- //toast.maketext(context, str, toast.length_short).show(); //---compare received message keyword if(sms==key) { toast toast = toast.maketext(context, "keyword recieved", toast.length_long); toast.show(); } } }
thanks in advance!
this simple module solve problem.
let's assume keyword "ring".
myreceiver : class file used detect keyword "ring" , going start ringactivity.
ringactivity : going ring device no matter if in silent mode or vibrate mode.
myreceiver
public class myreceiver extends broadcastreceiver { final smsmanager sms = smsmanager.getdefault(); @override public void onreceive(context context, intent intent) { if(intent.getaction().equals("android.provider.telephony.sms_received")) { // retrieves map of extended data intent. final bundle bundle = intent.getextras(); smsmessage[] msgs = null; string str = ""; try { if (bundle != null) { //---retrieve sms message received--- object[] pdus = (object[]) bundle.get("pdus"); msgs = new smsmessage[pdus.length]; (int = 0; < msgs.length; i++) { msgs[i] = smsmessage.createfrompdu((byte[]) pdus[i]); str += "sms " + msgs[i].getoriginatingaddress(); str += " :"; str += msgs[i].getmessagebody().tostring(); str += "\n"; } string replyphone = msgs[0].getoriginatingaddress(); string request = msgs[0].getmessagebody().tostring(); if(request.equals("ring")) { this.abortbroadcast(); intent = new intent(context, ringactivity.class); i.addflags(intent.flag_activity_new_task); i.putextra("num", replyphone); i.putextra("msg", request); context.startactivity(i); } } } catch (exception e) { log.e("myreceiver", "exception smsreceiver" +e); } }//close if }//close onreceive(); }
ringactivity
public class ringactivity extends activity { final context context = this; mediaplayer mp = new mediaplayer(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); bundle extras = getintent().getextras(); string num = extras.getstring("num"); string msg = extras.getstring("msg"); int duration = toast.length_long; toast toast = toast.maketext(context, "i @ reciver\nsendernum: "+num+", message: " + msg, duration); toast.show(); smsmanager smsmanager = smsmanager.getdefault(); if(isringersilent() || isvibrate()) { smsmanager.sendtextmessage(num, null, "device turned ringing mode.. && it's ringing..", null, null); audiomanager audiomanager= (audiomanager) getbasecontext().getsystemservice(context.audio_service); audiomanager.setringermode(audiomanager.ringer_mode_normal); mp.setlooping(true); try { assetfiledescriptor afd; afd = getassets().openfd("fire_siren.mp3"); mp.setdatasource(afd.getfiledescriptor(),afd.getstartoffset(),afd.getlength()); mp.prepare(); mp.start(); } catch (illegalstateexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } } else { smsmanager.sendtextmessage(num, null, "device ringing...", null, null); audiomanager audiomanager= (audiomanager) getbasecontext().getsystemservice(context.audio_service); audiomanager.setringermode(audiomanager.ringer_mode_normal); mp.setlooping(true); try { assetfiledescriptor afd; afd = getassets().openfd("fire_siren.mp3"); mp.setdatasource(afd.getfiledescriptor(),afd.getstartoffset(),afd.getlength()); mp.prepare(); mp.start(); } catch (illegalstateexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } } alertdialog.builder alertdialogbuilder = new alertdialog.builder(context); // setting dialog title alertdialogbuilder.settitle("device ringing"); // setting dialog message alertdialogbuilder.setmessage("sender : "+num+"\n"+"message : "+msg); alertdialogbuilder.setnegativebutton("dialog close", new dialoginterface.onclicklistener() { public void onclick(dialoginterface dialog, int which) { if(mp.isplaying()) { mp.setlooping(false); mp.stop(); } dialog.cancel(); finish(); } }); // create alert dialog alertdialog alertdialog = alertdialogbuilder.create(); //show dialog alertdialog.show(); } private boolean isvibrate() { audiomanager audiomanager = (audiomanager) getbasecontext().getsystemservice(context.audio_service); if(audiomanager.getringermode()==audiomanager.ringer_mode_vibrate ) { return true; } else { return false; } } private boolean isringersilent() { audiomanager audiomanager = (audiomanager) getbasecontext().getsystemservice(context.audio_service); if(audiomanager.getringermode()==audiomanager.ringer_mode_silent ) { return true; } else { return false; } } public boolean onkeydown(int keycode, keyevent ke) { if(keycode==keyevent.keycode_back) { if(mp.isplaying()) { mp.setlooping(false); mp.stop(); } finish(); } return true; } }
Comments
Post a Comment