How to use getApplicationContext in BroadcastReceiver class?

前端 未结 3 1239
醉话见心
醉话见心 2021-01-11 19:22

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

package com.escortme.basic;

import android.content.BroadcastReceiver;
import and         


        
相关标签:
3条回答
  • 2021-01-11 19:28

    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().

    0 讨论(0)
  • 2021-01-11 19:37

    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.

    0 讨论(0)
  • 2021-01-11 19:47

    I hope this may help you my frnd.

    Try importing this package (import android.telephony.gsm.SmsManager;)

    //---sends a SMS message to another device--- private void sendSMS(String phoneNumber, String message) {
    String SENT = "SMS_SENT"; String 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);               
    }    
    
    0 讨论(0)
提交回复
热议问题