2012-07-02 16 views
6

मेरे वीओआइपी Android एप्लिकेशन लॉक किया गया है सी/मूल निवासी लाइब्रेरी जो लॉगिन के सभी व्यापार तर्क करता है/इस के साथ लॉगआउट आदियूडीपी/RTCP पैकेट तक पहुँच ही नहीं डिवाइस/आवेदन Whens डिवाइस स्क्रीन

जारी करना है जब डिवाइस स्क्रीन एप्लिकेशन लॉक किया गया है (सी कोड) सर्वर से किसी भी पैकेट प्राप्त करने में सक्षम नहीं है। मैंने इसे वायरशर्क के साथ सत्यापित किया। ऐसा लगता है कि सीपीयू नहीं चल रहा है।

मैं अपने आवेदन आईएनआईटी पर नीचे दिए गए मुद्दे को हल करने में सक्षम था।

WakeLock mWakeLock = null; 
PowerManager pm = (PowerManager) cxt.getSystemService(Context.POWER_SERVICE); 
if(mPartialWakeLock == null){ 
    // lock used to keep the processor awake. 
    mPartialWakeLock = pm.newWakeLock(
     PowerManager.PARTIAL_WAKE_LOCK 
      | PowerManager.ON_AFTER_RELEASE, TAG); 
    mPartialWakeLock.acquire; 
} 

लेकिन ऊपर करने से मेरी बैटरी निकल जाएगी।

अनुरोध मेरे आवेदन तक क्यों नहीं पहुंच रहे हैं? स्क्रीन लॉक होने पर और सर्वर से अनुरोध प्राप्त करने पर मैं डिवाइस CPU को हर समय कैसे बना सकता हूं?

नोट: संपादित उपकरण का इस्तेमाल किया: सैमसंग रग्बी स्मार्ट i847 ओएस:। Android ओएस, v2.3.6 (Gingerbread.UCLA4)

आवेदन आकाशगंगा s2 पर काम करता है (ऐसा तो नहीं कि अपने डुअल कोर प्रोसेसर और सीपीयू स्क्रीन लॉक पर है?) स्काइप और VIBER ने स्लीप मोड में डब्लूआरटी कैसे बनाया ??

+1

वाकेलॉक्स का उपयोग करें और बैटरी निकालें; या फिर ऐसा करने की कोशिश मत करो। या तय करें कि सी 2 डीएम आपकी आवश्यकताओं को पूरा कर सकता है या नहीं। यह बैटरी पर चलने का व्यापार है! –

+2

सी 2 डीएम मेरे कारण की सेवा नहीं करेगा .. और कुछ भी आप क्रिस का सुझाव दे सकते हैं !! – NitZRobotKoder

+0

हो सकता है कि आपके डिवाइस ने बैटरी सेटिंग को सहेज लिया है जो स्क्रीन लॉक करते समय नेटवर्क बंद कर देता है? – xtr

उत्तर

1

क्या आपने service का उपयोग करने पर विचार किया था?

Service आवेदन कुछ यह पृष्ठभूमि (तब भी जब उपयोगकर्ता सीधे आवेदन के साथ बातचीत नहीं कर रहा है) में कर रही किया जाना चाहता है के बारे में बताने के लिए प्रणाली के लिए एक सुविधा प्रदान कर रहा है। इसे शुरू करके, सिस्टम सेवा के लिए काम शेड्यूल करेगा, सेवा तक चलने के लिए या किसी और ने स्पष्ट रूप से इसे रोक दिया है।

मुझे लगता है .. कि मदद कर सकते हैं चीयर्स

संपादित करें: ओकी, यू सेवाओं से पहले का उल्लेख नहीं था .. मैं अभी भी यकीन नहीं करता है, तो यू दोनों समस्याओं (बैटरी के नष्ट होने और प्राप्त नहीं गया डेटा) या सिर्फ एक जहां आप नाली के साथ डेटा प्राप्त कर रहे हैं ..?

नाली बैटरी को ध्यान में रखते हुए आप WAKE_LOCK के विभिन्न झंडे के साथ प्रयोग कर सकते हैं।

डिवाइस बैटरी जीवन काफी इस API के उपयोग से प्रभावित होगा:

खास बात मैंने देखा है कि आप के रूप में जुड़ा हुआ WAKE_LOCK पृष्ठ पर सलाह नहीं रिहाई mPartialWakeLock.release() साथ ताला किया है। WakeLocks प्राप्त न करें जब तक कि आपको वास्तव में उनकी आवश्यकता न हो, न्यूनतम स्तरों का उपयोग करें, और जितनी जल्दी हो सके इसे रिलीज़ करना सुनिश्चित करें।

साथ ही, कुछ अन्य posts के अनुसार, बैटरी समाप्ति गति काम और सेवा में कर उर चीजों की प्रभावशीलता पर निर्भर करता है, तो यह वह जगह है जहाँ हम कोड के अधिक देखे बिना मदद करने में सक्षम नहीं हैं ..: एस

बीटीडब्ल्यू .. IMHO अगर आप केवल आने वाली कॉल के लिए प्रतीक्षा करते हैं और आप हर समय WAKE_LOCK रखते हैं, तो यह बैटरी की उच्च नाली का कारण हो सकता है .. सोचें कि आपको क्या चाहिए और संसाधनों के उपयोग को कम करने का प्रयास करें उन्हें जरूरत नहीं है ..उदाहरण के लिए WIFI_LOCK पर विचार करें, और जितनी जल्दी हो सके WAKE_LOCK को छोड़ दें ..

+0

मेरे पास सेवा है, समस्या मेरा सी/मूल कोड है जो सर्वर से अनुरोध प्राप्त करता है और फिर यह मेरे एंड्रॉइड एप्लिकेशन लेयर (यूआई) को देगा, यहां अनुरोध सी/मूल कोड तक नहीं पहुंच रहे हैं सीपीयू नहीं चल रहा है। – NitZRobotKoder

+0

अब मुझे मिल गया ..: एस – Ewoks

+0

कुछ भी जो आप इवोक्स पर जोड़ सकते हैं !!! – NitZRobotKoder

1

मैं एक ऐसे अनुप्रयोग पर काम कर रहा हूं जो एक ऐसी सेवा चलाता है जो लॉन्च पर सर्वर से लगातार टीसीपी कनेक्शन स्थापित करता है ताकि संदेश प्राप्त करने में सक्षम हो सके सर्वर। सेवा किसी भी ताले हासिल नहीं करता है। आवेदन के इस हिस्से को कुछ समय पहले लागू किया गया है, और अब तक मुझे सर्वर से संदेश प्राप्त करने में सक्षम नहीं होने के साथ कोई समस्या नहीं है। अपना प्रश्न पढ़ने के बाद मैंने परीक्षण करने का फैसला किया कि मुझे यह समस्या क्यों नहीं थी।

मैंने सोचा था कि यहां तक ​​कि अगर मैं किसी भी ताले पकड़े नहीं कर रहा हूँ, शायद वहाँ अन्य अनुप्रयोगों कि कर रहे हैं, जो इसलिए सीपीयू को जीवित रखने के हैं। adb shell dumpsys चल रहा है, मैंने देखा कि यह मामला नहीं था: mLocks.size=0

इसका मतलब यह होगा कि आवेदन अभी भी, पैकेट प्राप्त करने भले ही डिवाइस सो है में सक्षम है। मैं इस पर कुछ भी आधिकारिक नहीं मिल सकता है, लेकिन इंटरनेट पर कई पदों सहमत करने लगते हैं:

हालांकि मैं जहां इस दस्तावेज का एक अच्छा उदाहरण नहीं मिला है, ऐसा लगता है कि अपने फोन को सो है, भले ही, डेटा कनेक्शन पर प्राप्त होता है, अपने कोड (source)


> कहो कि डिवाइस गहरी नींद में है और नेटवर्क स्टैक एक इनकमिंग पैकेट प्राप्त करता है उठ कर दिया जाएगा [...] । क्या वह डिवाइस को जगाएगा?

यह चाहिए। (source)

हालांकि, ध्यान दें दोनों स्रोतों अनुशंसा करते हैं कि है कि आप के पैकेट पर कार्रवाई करने के आदेश में इस प्रक्रिया के दौरान सोते से डिवाइस को रोकने के लिए, एक सक्रिय करने वाले लॉक प्राप्त करना चाहिए। मैं अपने आवेदन में ऐसा नहीं करता (शायद मुझे चाहिए), लेकिन मेरी प्रसंस्करण वास्तव में कम है।

जब आप कहते हैं कि आपके अनुरोध आपके आवेदन तक नहीं पहुँच रहे हैं, तो आप यह सुनिश्चित करें कि वे नहीं कर रहे हैं? हो सकता है कि वे हैं, लेकिन आपका आवेदन उत्तर भेजने से पहले सो जाता है? जब आप अपनी सॉकेट पर डेटा प्राप्त करते हैं और अपनी प्रसंस्करण के साथ किए जाने के बाद इसे जारी करते हैं तो वेक लॉक प्राप्त करने का प्रयास करें।

+0

पूरी तरह से @Artyom से सहमत हैं। मुझे लगता है कि उनकी समस्या "लॉगिन के सभी व्यावसायिक तर्क/लॉगआउट इत्यादि" के लिए मूल कोड का उपयोग कर रही है। - सब कुछ मतलब है! यही कारण है कि वह WAKE_LOCK को बहुत लंबा रखता है, जो निश्चित रूप से बैटरी को हटा देता है .. – Ewoks

+0

लेकिन एप्लिकेशन एस 2 डिवाइस पर आकर्षण की तरह काम करता है !! समस्या सैमसंग रग्बी स्मार्ट I847 – NitZRobotKoder

+0

@NitZRobotKoder शायद S2 पर डिवाइस आपके प्रसंस्करण के समाप्त होने के लिए काफी देर तक जागती रहती है। क्या आपने कोशिश की है कि मैंने अपने जवाब में क्या सुझाव दिया? – Artyom

0

, wakelocks का उपयोग कर के रूप में वे अविश्वसनीय और गाड़ी रहे हैं के लिए कोई ज़रूरत नहीं।

यह अधिक प्रबंधनीय तरह से है कि एंड्रॉयड द्वारा ध्यान रखा जाता है में स्क्रीन पर रखने का सिस्टम के अपने संस्करण का उपयोग करने के कुशल होगा:

अपनी गतिविधि में onCreate के भीतर, ऐसा करते हैं:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | 
        WindowManager.FLAG_SHOW_WHEN_LOCKED); 

सार्वजनिक स्थिर अंतिम पूर्णांक FLAG_SHOW_WHEN_LOCKED

:

इस डेवलपर के API से है here पाया

चूंकि: एपीआई स्तर 5 विंडो ध्वज: स्क्रीन को लॉक होने पर विंडो को दिखाए जाने के लिए विशेष ध्वज। यह एप्लिकेशन विंडो को कुंजी गार्ड या किसी अन्य लॉक स्क्रीन पर प्राथमिकता देने देगा। कुंजी गार्ड विंडो दिखाने से पहले FLAG_KEEP_SCREEN_ON के साथ स्क्रीन को चालू करने और सीधे प्रदर्शित करने के लिए उपयोग किया जा सकता है। FLAG_DISMISS_KEYGUARD के साथ स्वचालित रूप से पूरी तरह से गैर-सुरक्षित कीगार्ड को खारिज करने के लिए उपयोग किया जा सकता है। यह ध्वज केवल शीर्ष-पूर्ण-पूर्ण स्क्रीन विंडो पर लागू होता है।

लगातार मान: 524288 (0x00080000)

झंडे पर कुशल स्क्रीन के साथ यह संयोजन से, स्क्रीन लॉक की सुविधा के आसपास मिलना चाहिए। केवल एक चीज है यह सुनिश्चित करें कि आपकी गतिविधि शीर्ष पर सबसे अधिक पर है।

PowerManager

सार्वजनिक स्थिर अंतिम पूर्णांक SCREEN_BRIGHT_WAKE_LOCK की FLAG_KEEP_SCREEN_ON के उपयोग

यह लगातार बहिष्कृत हो गई है पर बोली के लिए,। अधिकांश अनुप्रयोगों को इस प्रकार के वेक लॉक के बजाय FLAG_KEEP_SCREEN_ON का उपयोग करना चाहिए, क्योंकि यह प्लेटफॉर्म द्वारा सही ढंग से प्रबंधित किया जाएगा क्योंकि उपयोगकर्ता अनुप्रयोगों के बीच चलता है और उसे विशेष अनुमति की आवश्यकता नहीं होती है। वेक लॉक सुनिश्चित करता है कि स्क्रीन पूरी चमक पर है; कीबोर्ड बैकलाइट को जाने की अनुमति दी जाएगी।

0

ऐसे कोड बनाने की कोई आवश्यकता नहीं है जो काम नहीं करते - आप तैयार सॉफ्टवेयर का उपयोग क्यों नहीं करते? हम ओकेकी फोन सिस्टम एक्सई पीबीएक्स और एंड्रॉइड फोन का उपयोग करते हैं (वीओआईपी के साथ सिस्टम से जुड़े 30 एंड्रॉइड फोन हैं) और वे परेशानी मुक्त काम करते हैं।

इस की जाँच करें: Link RTCP प्रोटोकॉल से निपटने के साथ

वहाँ कभी नहीं रहा समस्या। यदि आप चाहें तो परीक्षण संस्करण आज़माएं।

आशा है कि मैं मदद कर सकता हूं।

0

यूपीपी डेटा प्राप्त नहीं किया जा सकता है जबकि आप पृष्ठभूमि में ऐप चल रहे हैं। क्योंकि आपका क्लाइंट जो मल्टीकास्ट के रूप में डेटा भेज रहा है। जब आप मोबाइल डिवाइस स्क्रीन लॉक हो जाते हैं और ऐप पृष्ठभूमि में चल रहा है, इस मामले में मोबाइल हार्डवेयर में मैक फ़िल्टर और आईपी फ़िल्टर है जो केवल उस डेटा को स्वीकार कर सकता है जो किसी विशेष आईपी को इंगित करता है जो डिवाइस से संबंधित है। सरल शब्द में आपको यूनिकास्ट करने की आवश्यकता है। उदाहरण के लिए: ग्राहक है जो किसी विशेष सॉकेट और आईपी पर डेटा भेजता है (आपके मामले में आप 255.255.255.255 पर डेटा भेज रहे हैं) और यदि डेटा प्राप्त करने के लिए कोई डिवाइस तैयार है तो आपका डेटा किसी विशेष पोर्ट पर प्रसारित होता है वह पोर्ट जो उदाहरण के लिए सर्वर की तरह काम कर रहा है, आप ऐप सर्वर की तरह काम कर रहे हैं और यदि आपका ऐप अग्रभूमि पर चल रहा है तो उसे डेटा प्राप्त हुआ। और जब आप पृष्ठभूमि ऐप में ऐप नहीं करेंगे।

तो, आपको क्या करना है, आपको डिवाइस आईपी पता प्राप्त करना होगा और आपको अपने डिवाइस आईपी पते पर डेटा भेजना होगा, इसका मतलब है कि आप यूनिकास्ट करने जा रहे हैं। इसमें आपका ऐप डेटा या तो पृष्ठभूमि या अग्रभूमि चला रहा है और आपकी मोबाइल स्क्रीन लॉक हो जाएगी।