-1

i have created one dynamic SMS received receiver but it is not working need your help... i am sending SMS on port No 24685 from my one cellphone and running below mentioned code on other cellphone but dont know why i am not getting any SMS on that port.. for your information i am getting delivery report on my first cellphone but my receiver is not able to detect that message....

public class TestingSMSReceiverActivity extends Activity {
private Context context;
private MessageReceivedReceiver messageReceivedReceiver;
private String port="24685";
private short sendPort= 24685;
private TextView tv;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv=(TextView) findViewById(R.id.tv);
    context=getApplicationContext();
    openReceiver();

}

public class MessageReceivedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        showLog("MessageReceivedReceiver Message Received");
        Toast.makeText(context, "SMS Received", Toast.LENGTH_SHORT).show();

        try
        {
            switch (getResultCode()) {
            case Activity.RESULT_OK:
                Bundle bundle = arg1.getExtras();
                SmsMessage[] msgs = null;
                if (bundle != null)
                {
                    //---retrieve the SMS message received---
                    Object[] pdus = (Object[]) bundle.get("pdus");
                    msgs = new SmsMessage[pdus.length];            
                    for (int i=0; i<msgs.length; i++)
                    {
                        msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                
                        byte[] data = msgs[i].getUserData();
                        String receivedTextMessage=new String(data);
                        Toast.makeText(context, ""+msgs.length+" "+receivedTextMessage, Toast.LENGTH_SHORT).show();
                        processReceivedSMS(receivedTextMessage);
                    }
                }
                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                showLog("RESULT_ERROR_GENERIC_FAILURE");
                break;
            case SmsManager.RESULT_ERROR_NO_SERVICE:
                showLog("RESULT_ERROR_NO_SERVICE");
                break;
            }
        }
        catch(Exception e)
        {
             Toast.makeText(context, e.toString(), Toast.LENGTH_SHORT).show();
        }

    }
}// end of public class messageReceivedReceiver

private void openReceiver()
{
    try
    {
        showLog("Open Receiver");
        IntentFilter filter = new IntentFilter(); 
        filter.addDataScheme("sms");//Try commenting the same for text msg
        filter.addDataAuthority("localhost", port);
        filter.addAction("android.intent.action.DATA_SMS_RECEIVED");//Binary Msg
        if(messageReceivedReceiver==null){
            messageReceivedReceiver=new MessageReceivedReceiver();
            showLog("new MessageReceivedReceiver instance created");
        }
        context.registerReceiver(messageReceivedReceiver,
                filter);
    }
    catch(Exception e)
    {
        showLog("openReceiver "+e.toString());
    }
}
private void showLog(String string) {
    // TODO Auto-generated method stub
    Log.d("SMSReceiver", string);
}



private void processReceivedSMS(String receivedTextMessage)
{
    unregisterReceivers();
    showLog("SMS receivedTextMessage= "+receivedTextMessage);
    try
    {
        tv.append(receivedTextMessage);
        showLog("Received Message "+receivedTextMessage);
    }
    catch(Exception e)
    {
        showLog("processReceivedSMS "+e.toString());
    }
}//end of processReceivedSMS

private void unregisterReceivers() {
      try {
           if(messageReceivedReceiver!=null){
           context.unregisterReceiver(messageReceivedReceiver);
           showLog("Unregister Received Receiver");
           }
      } catch (Exception e) {
          showLog("unregisterReceivers "+e.toString());
      }
    }

}

Kalpesh Patel
  • 1,638
  • 1
  • 20
  • 35
  • Are you getting "Message Received" Log in logcat? – drulabs Apr 25 '12 at 10:26
  • No i am not getting any "Message Received" message... Actually onReceive method of MessageReceivedReceiver is not geting executed... – Kalpesh Patel Apr 25 '12 at 10:51
  • 1
    you have mentioned your broadcast receiver class to your project android manifest file? – Dinesh Apr 25 '12 at 10:55
  • No, but is it needed as i have created nested broadcast receiver class and i am registering my receiver dynamically... but will try as u said... – Kalpesh Patel Apr 25 '12 at 10:58
  • @Dinesh i need to register receiver dynamically.. but i did as you said but it also didnt worked.. can you suggest me something else.. – Kalpesh Patel Apr 25 '12 at 11:12
  • your try for send sms via one emulator to other and it's not working within your code ? – Herry Apr 25 '12 at 12:17
  • @Kaplesh: I don't think u need to register in manifest file as your are doing register receiver. If I am not wrong your Broadcast receiver is inside your activity class get it out of there man. – drulabs Apr 25 '12 at 19:01

1 Answers1

0

Try the following two questions answers below link:

BroadcastReceiver as inner class

Programmatically register a broadcast receiver

Community
  • 1
  • 1
Dinesh
  • 6,500
  • 10
  • 42
  • 77
  • Thanks for your efforts, but declaring my Receiver class ouside main Activity class also didnt worked... i think there is some problem in host name... – Kalpesh Patel Apr 25 '12 at 12:12
  • Thanks a lot for your help... there was a mistake from my side... insted of giving permission for RECEIVE_SMS i had given permission of READ_SMS... Silly Mistake :D – Kalpesh Patel Apr 25 '12 at 12:52
  • I am doing something similar HERE!!! http://stackoverflow.com/questions/14452808/sending-and-receiving-mms-in-android – Etienne Lawlor Jan 22 '13 at 08:09