How to use getApplicationContext in BroadcastReceiver class?
Asked Answered
A

2

11

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

Anhydrite answered 3/7, 2012 at 1:4 Comment(1)
within onReceive(), just use context.getApplicationContext()Duwalt
C
17

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.

Convincing answered 3/7, 2012 at 1:7 Comment(1)
I have an activity called Pol_ViewActivity that extends the mapactivity, and while that activity is running, it needs to listen for sms texts. The code that listens for it is in SMSReceiverActivity (which the code is above). Now when the sms is detected it needs to call a method from Pol_ViewActivity so that I can send the string version of the smstext to a method in Pol_ViewActivity so that I can update the google map. Does this help?Anhydrite
S
5

One reason for getting the application context would be to get the the WIFI_SERVICE as it must be looked up on the Application context or memory will leak on devices < Android N.

As Someone Somewhere once said, within onReceive(), just use context.getApplicationContext().

Sojourn answered 8/5, 2017 at 16:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.