How to register the receiver in the main activity?

I have a class SmsReceiver

that I want to register in the main activity, what exactly should I do?

I am new to Android.

+2


source to share


5 answers


Or you can do 2 things:

  • Create and define BroadcastReceiver

    inManifest

  • Build and register BroadcastReceiver

    in code.

For option 2 (which you ask):

Create BroadcastReceiver

in code (MyBroadcastReceiver). Declare MyBroadcastReceiver in your scope Activity

:



MyBroadcastReceiver mMyBroadcastReceiver;

      

Register BroadcastReceiver

in Activity

with:

IntentFilter filter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);
this.registerReceiver(mMyBroadcastReceiver, filter);

      

+3


source


To receive SMS messages from the service, follow these steps:

  • Update your manifest to give your app permissions to receive SMS messages. (WRITE_SMS, READ_SMS, RECEIVE_SMS)
  • DO NOT update your manifest with the destination filter! (which every code example on the internet seems to do)
  • In your service, create a nested BroadcastReceiver class in the class

    private class SMSreceiver extends BroadcastReceiver
    {
        private final String TAG = this.getClass().getSimpleName();
    
        @Override
        public void onReceive(Context context, Intent intent)
        {
            Bundle extras = intent.getExtras();
    
            String strMessage = "";
    
            if ( extras != null )
            {
                Object[] smsextras = (Object[]) extras.get( "pdus" );
    
                for ( int i = 0; i < smsextras.length; i++ )
                {
                    SmsMessage smsmsg = SmsMessage.createFromPdu((byte[])smsextras[i]);
    
                    String strMsgBody = smsmsg.getMessageBody().toString();
                    String strMsgSrc = smsmsg.getOriginatingAddress();
    
                    strMessage += "SMS from " + strMsgSrc + " : " + strMsgBody;                    
    
                    Log.i(TAG, strMessage);
                }
    
            }
    
        }
    
    }
    
          

  • In your "Service" class, register to get a android.provider.Telephony.SMS_RECEIVED

    filter goal:

    public class ServiceCommunicator extends Service
    {
        private SMSreceiver mSMSreceiver;
        private IntentFilter mIntentFilter;
    
        @Override
        public void onCreate()
        {
            super.onCreate();
    
            //SMS event receiver
            mSMSreceiver = new SMSreceiver();
            mIntentFilter = new IntentFilter();
            mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
            registerReceiver(mSMSreceiver, mIntentFilter);
        }
    
        @Override
        public void onDestroy()
        {
            super.onDestroy();
    
            // Unregister the SMS receiver
            unregisterReceiver(mSMSreceiver);
        }
    }
    
          



What is it!

Note: you're not interested in why I didn't bind to my service from a separate BroadcastReceiver class - it doesn't work because it is bindService()

not available.

+2


source


For API level 19 and above

 IntentFilter smsFilter = new IntentFilter();
 smsFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
registerReceiver(this.receiver, filter);

      

+1


source


As you asked to register BroadcastReceiver

inside yours MainActivity

, which is suitable forregisterReceiver-codewise-inside-MainActivity

Here's what code looks like ==>

public class MainActivity extends Activity 
{
BroadcastReceiver smsReceiver;
private IntentFilter myFilter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);

   protected void onCreate(Bundle savedInstanceState) 
   {
    super.onCreate(savedInstanceState);
    registerReceiver(smsReceiver, myFilter); // register BroadCastReceiver at time of initialization of Activity with proper Intent-Filter
   }

@Override
  protected void onPause() 
   {
    unregisterReceiver(smsReceiver); // UnRegister BroadCastReceiver as you no longer have your activity at Foreground -- Saving CPU & Battery Drainage
    super.onPause();
   }

 @Override
   protected void onResume() 
   {
    registerReceiver(smsReceiver, myFilter); // Register BroadCastReceiver Once again as your activity comes from pause to forground state again.
    super.onResume();
   }

  smsReceiver = new BroadcastReceiver() //Implementation of your BroadCastReceiver
  {

    @Override
    public void onReceive(Context context, Intent intent)
    {
       // Do whatever you like as sms is received and caught by these BroadCastReceiver
        Toast.makeText(context, "SMS Received", Toast.LENGTH_LONG).show();          
    }
  };
 }

      

0


source


private BroadcastReceiver receiver = new BroadcastReceiver() {

   @Override
   public void onReceive(Context context, Intent intent) {
       //some action
   }
};

IntentFilter filter = new IntentFilter("YOUR_ACTION");
registerReceiver(receiver, filter);

      

Hope it helps

0


source







All Articles