2012-07-03 13 views
9

मैं इस कोडब्रॉडकास्ट रिसीवर क्लास में getAplicationContext का उपयोग कैसे करें?

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

का उपयोग कर संदेश SMS को सुनने के लिए प्रसारणकर्ता वर्ग का उपयोग कर रहा है और यह इतना

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

की तरह प्रकट में परिभाषित किया है लेकिन समस्या यह कहते हैं, "विधि getApplicationContext() है एसएमएस रिसीवर सक्रियता प्रकार के लिए अपरिभाषित "।

क्या किसी को पता है कि यह क्यों हो रहा है और इसे कैसे ठीक किया जाए? धन्यवाद

+1

'onReceive भीतर()', बस का उपयोग 'context.getApplicationContext()' –

उत्तर

13

onReceive हस्ताक्षर विधि पर देखो()

public void onReceive(Context context, Intent intent) { 

आप एक पैरामीटर के रूप में एक संदर्भ से पारित कर दिया जा रहा है। आपको उस संदर्भ का उपयोग करना चाहिए जब आपको एक की आवश्यकता हो।

Pol_ViewActivity appState = ((Pol_ViewActivity)context); 

संपादित करें: भी मैं नहीं जानता कि यह वास्तव में आप क्या करने की कोशिश कर रहे हैं। लेकिन शायद आपको गतिविधि ऑब्जेक्ट प्राप्त करने की कोशिश नहीं करनी चाहिए और उस पर एक विधि कॉल करना चाहिए जैसा आप ऐसा कर रहे हैं।

+0

मैं एक गतिविधि Pol_ViewActivity कहा जाता है कि mapactivity फैली हुई है, और जब तक कि गतिविधि चल रहा है, यह एसएमएस ग्रंथों के लिए सुनने की जरूरत है। कोड जो इसके लिए सुनता है एसएमएस रीसीवर एक्टिविटी (जो कोड ऊपर है) में है। अब जब एसएमएस का पता चला है तो उसे Pol_ViewActivity से एक विधि कॉल करने की आवश्यकता है ताकि मैं pol_ViewActivity में एक विधि में smstext का स्ट्रिंग संस्करण भेज सकूं ताकि मैं Google मानचित्र को अपडेट कर सकूं। क्या यह मदद करता है? – omega

2

मुझे आशा है कि यह आपकी फ्रेंड की मदद कर सकता है।

इस पैकेज (आयात android.telephony.gsm.SmsManager;) आयात करने का प्रयास करें

// --- एक और डिवाइस --- निजी शून्य SendSMS (स्ट्रिंग PhoneNumber, स्ट्रिंग संदेश को एसएमएस संदेश भेजता है) {
स्ट्रिंग SENT = "SMS_SENT"; स्ट्रिंग डिलीवर = "एसएमएस_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);    
}  
1

एक कारण यह WIFI_SERVICE के रूप में यह ऐप्लिकेशन संदर्भ या स्मृति पर देखा जाना चाहिए < एंड्रॉयड एन

उपकरणों पर रिसाव हो जाएगा के रूप में एक बार कहा था Someone Somewhere प्राप्त करने के लिए हो सकता है, onReceive() के भीतर, बस context.getApplicationContext() का उपयोग करें।