2017-09-14 11 views
8

डेवलपर कंसोल में - एंड्रॉइड राजधानियों में मुझे चेतावनी दिखाई देती है कि ऐप में "आंशिक जागने वाले ताले लगाए गए हैं"। documentation में यह रूप मेंएंड्रॉइड राजधानियां - अटक वेक ताले और अग्रभूमि सेवा

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

यह सच है कि ऐप पृष्ठभूमि में चल रहा है (ऑडियो बज रहा है) लेकिन जब मैं ऐप लॉक अधिसूचना रखता हूं तो मैं अग्रभूमि सेवा और पूरे समय का उपयोग करता हूं।

documentation में बाद में आप पढ़ सकते हैं

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

लेकिन यह सच नहीं लगता है। एंड्रॉइड राजधानियों को अनदेखा कर रहा है कि ऐप में अग्रभूमि सेवा है? क्या किसी के पास समान अनुभव है?

संपादित करें: यहाँ मेरी AudioService

PowerManager.WakeLock mWakeLock = null; 
boolean mHasWakeLock; 

void acquireLocks(){ 

    if (!mHasWakeLock) { 
     final PowerManager pm = (PowerManager) 
     context.getSystemService(Context.POWER_SERVICE); 
     mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,TAG); 
     mWakeLock.setReferenceCounted(false); 
     mWakeLock.acquire(); 
     mHasWakeLock = true; 
    } 
} 

void releaseLocks() { 
    if (mWakeLock != null) { 
     mWakeLock.release(); 
     mWakeLock = null; 
    } 
    mHasWakeLock = false; 
} 

void play(){ 
    startForeground(NOTIFICATION_ID, notification); 
    acquireLocks(); 
} 

void stop(){ 
    releaseLocks(); 
    stopForeground(true); 
} 
+0

कृपया वैकेलॉक और अग्रभूमि सेवा –

+0

के लिए प्रासंगिक कोड जोड़ें। ऐप को आंशिक वेक लॉक की आवश्यकता है और उपयोगकर्ता को इसकी भी आवश्यकता है। लेकिन Google अन्यथा सोचता है ... यदि आपको कोई समाधान मिल जाता है तो इसे साझा करें (मैं setReferenceCounted का उपयोग नहीं कर रहा हूं) धन्यवाद! – Trancer

उत्तर

2

मुझे लगता है कि से कोड है, समस्या

mWakeLock.setReferenceCounted(false); 

में, जब आप लॉक जारी हां, तो सिस्टम भरोसा कर सकते हैं है true होना चाहिए। अपने मामले में, आप इसे जारी कर सकते हैं, लेकिन सिस्टम इसे "देख" नहीं देता है। यह राजधानियों को भ्रमित कर सकता है।

इसे उस ध्वज सेट के साथ सही करने का प्रयास करें। उम्मीद है कि यह मदद करता है।

+0

मुझे लगता है कि setReferenceCounted झूठा सुरक्षित है। इसका मतलब है कि यह एक बार रिलीज कॉल करने के लिए तैयार है और इससे कोई फ़र्क नहीं पड़ता कि आपने कितनी बार अधिग्रहण किया है। लेकिन इस मामले में मैं यह जांचने के लिए ध्वज का उपयोग करता हूं कि मेरे पास लॉक है या नहीं। https://developer.android.com/reference/android/os/PowerManager.WakeLock.html#setReferenceCounted(boolean) – vandzi

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