Cómo utilizar getApplicationContext en la clase BroadcastReceiver?

Estoy utilizando la clase broadcaster para escuchar mensajes sms usando este código

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"); } } } 

Y se define en manifiesto así

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

Pero el problema es que dice "El método getApplicationContext () no está definido para el tipo SMSReceiverActivity".

¿Alguien sabe por qué sucede esto y cómo solucionarlo? Gracias

Mire la firma del método para onReceive ()

 public void onReceive(Context context, Intent intent) { 

Se está pasando un contexto como un parámetro. Deberías usar ese contexto cuando lo necesites.

 Pol_ViewActivity appState = ((Pol_ViewActivity)context); 

EDIT: también no sé exactamente lo que está tratando de hacer. Pero probablemente no debería estar tratando de obtener un objeto de actividad y llamar a un método en él como usted parece estar haciendo.

Espero que esto pueda ayudar a mi frnd.

Intente importar este paquete ( import android.telephony.gsm.SmsManager; )

// — envía un mensaje SMS a otro dispositivo — private void sendSMS (String phoneNumber, String message) {
Cadena SENT = "SMS_SENT"; Cadena DELIVERED = "SMS_DELIVERED";

  PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0); PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0); //---when the SMS has been sent--- registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "SMS sent", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(getBaseContext(), "Generic failure", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(getBaseContext(), "No service", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(SENT)); //---when the SMS has been delivered--- registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "SMS delivered", Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(DELIVERED)); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); } 

Una de las razones para obtener el contexto de la aplicación sería obtener el WIFI_SERVICE como debe ser buscado en el contexto de la aplicación o la memoria se fugará en los dispositivos <Android N.

Como Someone Somewhere dijo una vez, dentro de onReceive() , sólo use context.getApplicationContext() .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.