6

दिखा रही है मेरे पास एक पृष्ठभूमि कार्य है जिसे मैं संभालना चाहता हूं। बात यह है कि जब कार्य पूरा हो जाता है, तो मैं उपयोगकर्ता को परिणाम दिखाने के लिए एक नई गतिविधि को कॉल करना चाहता हूं, केवल तभी जब मेरी मुख्य गतिविधि दिखा रही है, अन्यथा मैं सिर्फ एक अधिसूचना भेजना चाहता हूं ताकि उपयोगकर्ता यह देख सके कि कार्रवाई पूरा हो गया, और जब भी वह पसंद करता है इसे खोलने में सक्षम हो।केवल एक सूचना दिखाएं यदि गतिविधि

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

तो यह मेरी समस्या है, और क्योंकि मेरी जानकारी और पृष्ठभूमि कार्य और सेवाओं में अनुभव सीमित है मैं कुछ मदद के लिए पूछना का फैसला किया।

मेरे मामले को पढ़ने के लिए अग्रिम धन्यवाद, कुछ मदद की आशा है!

उत्तर

23

यहाँ एक अच्छा लेख जो बताती है कि आप क्या चाहते को लागू करने का तरीका देखें: Activity or Notification via Ordered Broadcast

मुख्य विचार आदेशित प्रसारण का उपयोग करना है। आपको BroadcastReceiver बनाना चाहिए जो बिना किसी गतिविधि के जी रहेगा। ऐसा करने के लिए आपको इसे AndroidManifest.xml फ़ाइल में घोषित करना चाहिए। यह रिसीवर Notification दिखाएगा। इसके अलावा आपको अपनी मुख्य गतिविधि में उच्च प्राथमिकता के साथ BroadcastReceiver पंजीकृत करना चाहिए जो स्क्रीन पर कुछ प्रदर्शित करेगा। तो आपको बस एक आदेशित प्रसारण भेजने की जरूरत है।

+0

यह प्रश्न पोस्ट करने के बाद मुझे एक संभावित उत्तर मिला और वास्तव में अच्छा अभ्यास लगता है। लिंक वास्तव में सहायक है, बहुत बहुत धन्यवाद। मुझे लगता है कि यह वही तरीका है जिसका मैं पालन करूंगा! – akalipetis

+3

सुपर सुरुचिपूर्ण और अच्छी तरह से काम करता है! – Orr

+0

@ एंटोनिस: क्या आप कृपया एक कोड प्रदान कर सकते हैं कि हम इसे कैसे कार्यान्वित करते हैं? – Sam

2

इस तरह प्रयास करें।

private static boolean isInForeground; 

onResume(){ 
    isInForground = true; 
} 
onPause(){ 
    isInForground = false; 
} 

अगर isInForground true है तो गतिविधि forground (दिखा रहा है) अन्यथा नहीं दिखाई दे रहा है।

यदि आप कहीं से भी जानना चाहते हैं तो मुख्य कार्यशीलता में निम्नलिखित जोड़ें।

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    onResume(){ 
     pref = PreferenceManager.getDefaultSharedPreferences(this); 
     prefEditor = prefs.edit(); 
     prefEditor.putBoolean("isInForeground",true); 
     prefEditor.commit(); 
    } 

    onPause(){ 
      pref = PreferenceManager.getDefaultSharedPreferences(this); 
      prefEditor = prefs.edit(); 
      prefEditor.putBoolean("isInForeground", false); 
      prefEditor.commit(); 
    } 

फिर आपकी सेवा से।

pref = PreferenceManager.getDefaultSharedPreferences(this); 
if(pref.getBoolean("isInForeground", false)){ 
     //MainActivity is in forground 

} 
else{ 
     //not in forground 
} 
1

ऐसा लगता है जैसे आप किसी सेवा से थ्रेड में कार्य को कार्यान्वित करना चाहते हैं। आप गतिविधि में लगातार स्थिर बूलियन प्राप्त कर सकते हैं जो कहता है कि गतिविधि दिखायी गयी है या नहीं। onResume() में उपयोगकर्ता को एक गतिविधि दिखाई दे रही है और जब भी onPause() कहा जाता है तब दिखाई नहीं देता है। onResume() में बूलियन को सही पर सेट करें और onPause() में झूठा सेट करें।

0

आप साझा किए गए संदर्भों का उपयोग कर सकते हैं; किसी गतिविधि पर वरीयताओं को अद्यतन करें जब यह चालू है() या ऑनस्टॉप() और बस इसे सेवा में सत्यापित करें।

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

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