How to use getApplicationContext in BroadcastReceiver class?

omega picture omega · Jul 3, 2012 · Viewed 17.9k times · Source

I am using the broadcaster class to listen to sms messages using this code

package com.escortme.basic;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class SMSReceiverActivity extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Parse the SMS.
        Bundle bundle = intent.getExtras();
        SmsMessage[] msgs = null;
        String str = "";
        if (bundle != null)
        {
            // Retrieve the SMS.
            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]);
                // In case of a particular App / Service.
                //if(msgs[i].getOriginatingAddress().equals("+91XXX"))
                //{
                str += "SMS from " + msgs[i].getOriginatingAddress();
                str += " :";
                str += msgs[i].getMessageBody().toString();
                str += "\n";
                //}
            }
            // Display the SMS as Toast.
            Toast.makeText(context, str, Toast.LENGTH_SHORT).show();


            Pol_ViewActivity appState = ((Pol_ViewActivity)getApplicationContext()); // ERROR
            appState.move_map_to("33.786047","-59.187287");
        }
    }
}

and it's defined in manifest like so

    <receiver 
      android:name="com.escortme.basic.SMSReceiverActivity"
      android:enabled="true">
      <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
      </intent-filter>
    </receiver>

But the problem is it says "The method getApplicationContext() is undefined for the type SMSReceiverActivity".

Does anyone know why this is happening and how to fix it? Thanks

Answer

FoamyGuy picture FoamyGuy · Jul 3, 2012

Look at the method signature for onReceive()

public void onReceive(Context context, Intent intent) {

You are being passed a context as a parameter. You should be using that context when you need one.

Pol_ViewActivity appState = ((Pol_ViewActivity)context); 

EDIT: also I don't know exactly what it is you are trying to do. But you probably shouldn't be trying to obtain an Activity object and call a method on it like you seem to be doing.