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".

  1. myreceiver : class file used detect keyword "ring" , going start ringactivity.

  2. 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

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -