2009-10-04 21 views
14

मैंने मुख्य गतिविधि और प्रसारण सेवा भेज रहे पृष्ठभूमि सेवा में एक प्रसारण रिसीवर बनाया है। आवेदन हर बार मैं इसे चलाने का प्रयास दुर्घटनाओं और लॉग निम्न त्रुटि संदेश प्रदर्शित करता है:ब्रॉडकास्ट इरादा समस्या प्राप्त करने में त्रुटि

10-04 13: 30: 43.218: त्रुटि/AndroidRuntime (695): java.lang.RuntimeException: त्रुटि प्राप्त प्रसारित आशय { कार्रवाई = com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE (अतिरिक्त है)} में [email protected]

प्रसारण संदेश से भेजा गया है निम्नलिखित विधि में संचार सेवा वर्ग:

private void announceLoginStatus(){ 
    Intent intent = new Intent(LOGIN_STATUS_UPDATE); 
    intent.putExtra(SERVER_MESSAGE, mServerResponseMessage); 
    intent.putExtra(SESSION_STRING, mSessionString); 
    sendBroadcast(intent); 
} 

जहां

String LOGIN_STATUS_UPDATE = "com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE" 

मुख्य गतिविधि में निम्नलिखित प्रसारण reveiver परिभाषित किया गया है:

public class LoginStatusReceiver extends BroadcastReceiver { 

     public void onReceive(Context context, Intent intent) { 
      String serverMessage = intent.getStringExtra(CommunicationService.SERVER_MESSAGE); 
      String sessionString = intent.getStringExtra(CommunicationService.SESSION_STRING); 

      userInfo.setSessionString(sessionString); 
      saveSettings(); 
     } 
    } 

और onResume विधि में पंजीकृत:

 IntentFilter loginStatusFilter; 
     loginStatusFilter = new IntentFilter(CommunicationService.LOGIN_STATUS_UPDATE); 
     loginStatusReceiver = new LoginStatusReceiver(); 
     registerReceiver(loginStatusReceiver, loginStatusFilter); 

और मैनिफ़ेस्ट फ़ाइल मैं निम्नलिखित ncludes:

<activity android:name=".GaitLink" 
       android:label="@string/app_name"> 
     <intent-filter> 
      ... 
      <action android:name="com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE" /> 
     </intent-filter> 
    </activity> 

मैं वास्तव में अगर कोई समझा सकता है क्यों लॉग उपरोक्त संदेश और अनुप्रयोग क्रैश प्रदर्शित करता है की सराहना करेंगे।

धन्यवाद!

उत्तर

5

क्या आप डीबगर में कदम से कदम उठाए हैं ताकि यह पता चल सके कि दुर्घटना कहां होती है?

यह देखने के लिए एक बात यह है कि यदि आप किसी भी एंड्रॉइड लाइफसाइकिल घटनाओं को ओवरराइड कर रहे हैं तो आप आवश्यकतानुसार बेस क्लास के कन्स्ट्रक्टर को सही तरीके से बुला रहे हैं।

+58

शायद आप हमें बता सकते हैं कि समस्या क्या थी? – Buffalo

4

आपके पास दो Intent फ़िल्टर हैं; आपको केवल एक की जरूरत है। यदि आप BroadcastReceiverregisterReceiver() के माध्यम से पंजीकृत करते हैं, तो केवल IntentFilter का उपयोग करें जो कि API API का दूसरा पैरामीटर है - मेनिफेस्ट में <activity> में <intent-filter> तत्व भी न रखें।

मुझे निश्चित रूप से पता नहीं है कि यह आपकी समस्या है, लेकिन यह निश्चित रूप से मदद नहीं करता है।

7

जब आप एक नई गतिविधि शुरू करते हैं तो मैंने इसे intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); जोड़कर हल किया।

यदि किसी गतिविधि से शुरू नहीं हुआ है, तो intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK" आवश्यक है।

+0

यह मेरे लिए काम करता है! –

0

मुझे लगता है कि आपको जीवन चक्र विधि onPause() और onResume() अप्रबंधित करने और प्रसारण उद्देश्य पंजीकृत करने के लिए विधि का उपयोग करना है।

0

मुझे यकीन नहीं है कि आप समझ सकते हैं कि मैं अपनी अंग्रेजी के कारण क्या कहना चाहता हूं।

मुझे लगता है कि कोड की इस पंक्ति एक समस्या का कारण है:

int i = Integer.parseint(intent.getExtars("9")); 

और आप दो बार रजिस्टर: क्योंकि मैं चाहता हूँ

userInfo.setSessionString(sessionString); 

मेरे परियोजना गलत था।

0

मैंने पाया कि यह सुनिश्चित करना कि उद्देश्य मूल गतिविधि से चलाया गया था और चीजों को एक वर्ग में डालने से पूरे मुद्दे से छुटकारा पाना पड़ा।

-1

ठीक है कि मुझे क्या onNotification विधि घोषित किया गया था के लिए इस प्रकार के रूप में काम:

window.onNotification = function(event) { 
    alert('onNotification called!'); 
}; 
0

यह एक बहुत पुरानी सवाल है, लेकिन मैं बहुत से लोगों को अभी भी इसके लिए जवाब खोज की जाएगी लगता है। मेरी स्थिति इस तरह के समान है।

मैं क्या करना चाहता था, बाल गतिविधि में फिनिश() को कॉल करना है, जब कुछ घटनाएं मूल गतिविधि में होती हैं यानी मुख्य गतिविधि से लेकर बाल गतिविधि तक प्रसारण संदेश भेजकर।

के बाद (जैसे नेटवर्क कनेक्शन टूट गया है आदि आदि) MainActivity में कोड जब घटना हुई है:

Intent intent = new Intent("ACTIVITY_FINISH"); 
    intent.putExtra("FinishMsg","ACTIVITY_FINISH: Network broken."); 
    sendBroadcast(intent); 

बच्चे गतिविधि के OnResume में() फ़ंक्शन:

IntentFilter quitFilter = new IntentFilter(); 
    quitFilter.addAction("ACTIVITY_FINISH"); 
    registerReceiver(m_quitReceiver, quitFilter); 

में बाल गतिविधि के ऑनपोज़() फ़ंक्शन:

unregisterReceiver(m_quitReceiver); 

बाल गतिविधि सीएल के भीतर गधा:

BroadcastReceiver m_quitReceiver = new BroadcastReceiver() 
{ 
    public void onReceive(Context context, final Intent intent) 
    { 
     if (intent.getAction().equalsIgnoreCase("ACTIVITY_FINISH")) 
     { 
      Log.d("INFO", intent.getExtras().getString("FinishMsg")); 
      finish(); // do here whatever you want 
     } 
    } 
}; 

उम्मीद है कि इससे मदद मिलती है।

संबंधित मुद्दे