Search code examples
androidandroid-intentandroid-broadcast

accessing the phone number of a text message in android


I m new in android, i m trying to get the number of a text message when a new message comes, i m using broadcast reciever for this. but when a new message comes my 'broadcast reciever' class not working. can anyone help me to find out the problem. giving my code below..

public class MainActivity extends Activity
{
     @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test_layout);
    }


     public class MyBroadcastReciever extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        Bundle bundle = intent.getExtras();        
        SmsMessage[] msgs = null;
        String smsnumber = "";         
        if (bundle != null)
        {
            //---retrieve the sender number SMS 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]);                
                smsnumber =  msgs[i].getOriginatingAddress();         
            }
        } 
    }
}

}

i had given the recieve tag in manifest.

 <receiver android:name="com.aucupa.iack.MyBroadcastReciever" >
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

given the uses permission for recieving sms too..

<uses-permission android:name="android.permission.RECEIVE_SMS" />

but when an sms comes no response from the MyBroadcastReciever class.when i debug the control not comes to the MyBroadcastReciever class. plz help me to find out the problem

finally i got the answer from all your help, giving my answer here..

 public class MainActivity extends Activity
{

  MyBroadcastReciever broadcastreciever = new MyBroadcastReciever();
  static final String SOME_ACTION = "android.provider.Telephony.SMS_RECEIVED";
  IntentFilter intentFilter = new IntentFilter(SOME_ACTION);

  Intent i = new Intent(SOME_ACTION);
 @Override
protected void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
setContentView(R.layout.test_layout);

sendBroadcast(i);
context.registerReceiver(broadcastreciever, intentFilter);
}


 public class MyBroadcastReciever extends BroadcastReceiver
{

@Override
public void onReceive(Context context, Intent intent) 
{
   if (intent.getAction() == "android.provider.Telephony.SMS_RECEIVED"){
    Bundle bundle = intent.getExtras();        
    SmsMessage[] msgs = null;
    String smsnumber = "";         
    if (bundle != null)
    {
        //---retrieve the sender number SMS 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]);                
            smsnumber =  msgs[i].getOriginatingAddress();         
        }
    } 
 }
}
}

}

Solution

  • In manifest use this Premission

       <uses-permission android:name="android.permission.RECEIVE_SMS" />
       <uses-permission android:name="android.permission.SEND_SMS" />
    

    and

         <receiver android:name="net.app.sms.MessageReceiver" >
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
    

    try this...

    EDITED

         <receiver android:name="Your PackageName.ClassName" >
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>