2012-08-15 17 views
6

में जीवित कनेक्शन को संभालने के लिए कैसे करें I एंड्रॉइड आईएम एप्लिकेशन के लिए एस्मैक का उपयोग कर रहा हूं, जहां मैं एआईडीएल इंटरफ़ेस के साथ दूरस्थ सेवा का उपयोग कर रहा हूं।एंड्रॉइड सेवा

मेरी सेवा के onStartCommand विधि के अंदर मैं नीचे कोड लिखता हूं। मैं कनेक्शन बनाता हूं और फिर इसका उपयोग करके लॉगिन करता हूं। जब कोई मेरे आवेदन की मुख्य गतिविधि की onCreate विधि के अंदर अपना आवेदन चलाता है तो मेरी सेवा getApplicationContext.StartService(serviceIntent) चलाएं। यह ठीक काम कर रहा है, लेकिन कुछ मिनटों के बाद (कभी-कभी 10 मिनट और दस से अधिक समय) messageListener कि मैं सेवा के अंदर संलग्न करता हूं संदेश प्राप्त करने के लिए बंद हो जाता है। लेकिन मुझे पता है कि कनेक्शन मौजूद है, क्योंकि एक ही समय में मैं xmppConnection का उपयोग संदेश भेजने के लिए करता हूं, यह उपयोगकर्ता बी को संदेश भेज रहा है लेकिन यह उपयोगकर्ता बी से संदेश नहीं सुन रहा है। मुझे नहीं पता कि मेरे श्रोता संदेश सुनना क्यों बंद कर देते हैं।

public int onStartCommand(final Intent intent, final int flags, final int startId) { 
    ConnectionConfiguration config = new ConnectionConfiguration(URL, MyPort, Host); 
    xmppConnection = new XMPPConnection(config); 
    xmppConnection.connect(); 
    xmppConnection.login("[email protected]", "testpass"); 
    xmppConnection.addPacketListener(myMessageListener, new PacketTypeFilter(Message.class)); 
    return START_STICKY; 
} 
private PacketListener myMessageListener = new PacketListener() { 
    public void processPacket(Packet packet) { 
     Message msg = (Message) packet; 
    } 
} 

कृपया गाइड करें।

+0

कृपया अपना कोड प्रारूपित करें और अपनी पोस्ट के लिए एक अच्छा शीर्षक चुनें। – Flow

+0

समस्या यह है कि मेरा कनेक्शन मौजूद है लेकिन यह पैकेट को सुनना बंद कर देता है। उस कनेक्शन का उपयोग करके मैं भेजता हूं, जो ठीक काम कर रहा है, लेकिन यह नहीं पता कि यह आने वाले पैकेट को क्यों सुनना बंद कर देता है। मैं अपनी सेवा को बैकएंड पर भी चल रहा हूं क्योंकि मैं पैकेट भेज सकता हूं संदेश पैकेट भेजने के लिए सेवा, कृपया गाइड करें। मुझे नीचे दिए गए लिंक पर पोस्ट की गई एक ही समस्या का सामना करना पड़ रहा है। http://stackoverflow.com/questions/5040852/packet-listener-in-android-service – aftab

+0

आपके पोस्ट किए गए लिंक का उत्तर दिया जाना चाहिए ----> http://stackoverflow.com/questions/5040852/packet-listener -इन-एंड्रॉइड-सेवा – sascha10000

उत्तर

4

क्या आपका कनेक्शन बिना किसी त्रुटि के त्रुटि के बंद हो रहा है? आपको कनेक्शन स्थिति डीबग करने के लिए एक कनेक्शन श्रोता और प्रत्येक कॉलबैक के लिए एक लॉग जोड़ना चाहिए।

एंड्रॉइड पर "ज़ोंबी" सॉकेट होना संभव है: आप अभी भी इसे लिख सकते हैं, लेकिन प्राप्तकर्ता कभी संदेश नहीं प्राप्त करेगा, और निश्चित रूप से आप इससे नए संदेश नहीं पढ़ पाएंगे। यह नेटवर्क स्थिति परिवर्तन के बाद हो सकता है।

यह पता लगाने के लिए कि मैं XMPP Ping का उपयोग करता हूं, क्लाइंट से अलार्म से शुरू होता है (हर 15 मिनट में दोहराने वाला)। और मैं सफेद जगह को जिंदा रखता हूं। यह आपके क्लाइंट और आपके सर्वर (एनएटी या प्रॉक्सी) के बीच मौजूद अधिकांश टाइमआउट तंत्र को हरा देता है। प्लस, अगर आपको पिंग का कोई जवाब नहीं मिलता है (उदाहरण के लिए 20 के भीतर), तो आप मान सकते हैं कि कनेक्शन खराब स्थिति में है और मैन्युअल रूप से पुनः कनेक्ट करें।

+0

प्रिय गिलाउम पेरोट: आपके उत्तर के लिए धन्यवाद। मुझे एक अजीब मुद्दा का सामना करना पड़ रहा है। मैं अपने रहने वाले कनेक्शन को संभालने के लिए एआईडीएल सेवा का उपयोग कर रहा हूं। मैं संदेश भेज रहा हूं और प्राप्त कर रहा हूं जो ठीक काम कर रहा है। लेकिन एक्सएमपीपी ऑब्जेक्ट का उपयोग करके मैं एक उपयोगकर्ता को सब्सक्रिप्शन निमंत्रण अनुरोध भेजता हूं, यह अनुरोध पैकेट जुर्माना भेजता है। लेकिन यहां समस्या आ रही है अपने पैकेट श्रोता आने वाले पैकेट सुनने के लिए बंद करो। वही समय मैं उसी xmpp ऑब्जेक्ट का उपयोग करके पैकेट भेजने की कोशिश करता हूं, यह ठीक है लेकिन आने वाले पैकेट को सुनने के लिए रोक रहा है। यह आमंत्रण अनुरोध भेजने के बाद xmpp पैकेट श्रोता परेशान दिखता है। कृपया गाइड करें। । – aftab

+0

एंड्रॉइडडिबगर क्लास (नियमित स्मैक पर कंसोल डिबगर) का उपयोग पैकेट लिस्टनर एपीआई के बिना सॉकेट पर वास्तव में पढ़ा या लिखा गया प्रिंट करने के लिए किया जा सकता है। जब आपका श्रोता काम करना बंद कर देता है तो आपको जांच करनी चाहिए कि क्या आपको डीबगर के लॉग में पैकेट प्राप्त होते हैं। –

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