2010-02-17 7 views
23

हो सकता है तो यह आसान है, लेकिन मैं वास्तव में इसे अभी तक सही नहीं समझ पाया ... मुझे BroadcastReceiver अलार्म मैंगजर द्वारा ट्रिगर करने का इंतजार है - यह ठीक काम करता है।ब्रॉडकास्ट रिसीवर से केवल गतिविधि को सूचित करें यदि यह अग्रभूमि

अब: क्योंकि घटना है, अगर यह होता है, मुख्य गतिविधि की स्क्रीन पर कुछ तत्वों को ताज़ा करने की जरूरत है, मैं अपने गतिविधि है कि पृष्ठभूमि BroadcastReceiver से एक आशय भेजना चाहते हैं - लेकिन केवल अगर यह में है अग्रभूमि, उर्फ ​​सक्रिय।

यदि यह नहीं चल रहा है या दिखाई नहीं दे रहा है, तो मुझे परवाह नहीं है - और आखिरी चीज जो मैं करना चाहता हूं वह गतिविधि मेरे इरादे से शुरू कर रही है! मैं अपने ऑनस्यूम() विधि में विचारों की पुनर्भुगतान संभालता हूं, इसलिए मुझे बिल्कुल परवाह नहीं है।

कि कैसे करना है पर कोई संकेत? धन्यवाद!

संपादित करें: मेरा ब्रॉडकास्ट रिसीवर अलार्म की प्रतीक्षा कर रहा है जिसे उपयोगकर्ता को अधिसूचित किया जाना चाहिए। तो, यह प्रकट होना चाहिए और मैनिफेस्ट में घोषित किया जाना चाहिए। समस्या यह है कि: यह तय करना होगा कि उल्लिखित गतिविधि वर्तमान में सामने है या नहीं।

उत्तर

37

तो यह लगभग Bino का जवाब है, लेकिन: बजाय मो का गतिविधि में रिसीवर को विंग करें, अलग-अलग उद्देश्यों के साथ दो रिसीवर का उपयोग करें। पहले वाला आपका मूल अलार्म इरादा है, जैसा कि आपके पास पहले से मौजूद मैसेन्जर में पंजीकृत एक रिसीवर है, और फिर वह रिसीवर दूसरा प्रसारण इरादा भेजता है, जिसे गतिविधि द्वारा पंजीकृत रिसीवर द्वारा संभाला जाता है क्योंकि बिनो कहते हैं।

मैं अपने खुद के टाइमर परियोजना में ऐसा कर लेंगे, GitHub पर। यहां alarm receiver और requery receiver हैं। उम्मीद है की वो मदद करदे।

+0

एक आसान समाधान है कि मैं अभी तक नहीं सोचा था के लिए धन्यवाद :) –

+0

बिल्कुल सही - मैं के लिए उपयोगी था! आपको +1 – barry

+0

बिल्कुल वही जो मैं खोज रहा था। – wendelbsilva

42

मुझे विश्वास है कि आप अब अलार्ममेनगर से परिचित हैं (एक नया अलार्म बनाना, एक रिसीवर पंजीकृत करें ...) तो मैं इसके बारे में बात नहीं करूंगा। बस आपको अपने प्रश्न का समाधान दें। एक वर्ग फ़ाइल में और प्रकट में एक BroadcastReceiver पंजीकरण की

इसके बजाय, आप अपनी गतिविधि में एक नया BroadcastReceiver बनाते हैं और फिर, onResume विधि में यह रजिस्टर, और onPause विधि में यह अपंजीकृत, अपनी गतिविधि में इस तरह sth:

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //do something  
    } 
}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mIntentFilter = new IntentFilter(); 
    mIntentFilter.addAction("your alarm action"); 
    ... 
} 

@Override 
protected void onResume() { 
registerReceiver(mIntentReceiver, mIntentFilter); 
    ... 
super.onResume(); 
} 

@Override 
protected void onPause() { 
unregisterReceiver(mIntentReceiver); 
    ... 
super.onPause(); 
} 

रिसीवर केवल अलार्म आशय प्राप्त होगा जब अपनी गतिविधि अग्रभूमि :) में है

(माफ करना अगर मेरी अंग्रेजी स्पष्ट नहीं है)

+2

हाय बिनो! आपके उत्तर के लिए धन्यवाद - मुझे लगता है, मुझे अपना प्रश्न अपडेट करना होगा क्योंकि आपका जवाब एक नई समस्या लगाएगा ... मुझे ब्रॉडकास्ट रिसीवर ** ** ** हमेशा वहां रहना चाहिए, न केवल गतिविधि चल रही है और अग्रभूमि में! यह एक अलार्म है - ठीक है यह उपयोगकर्ता को उस बस के बारे में सूचित करेगा जिसे वह पकड़ना चाहता है। अब: अलार्म को अधिसूचित किया जाना चाहिए चाहे गतिविधि क्या कर रही हो। लेकिन: अगर और केवल अगर यह सक्रिय है और अग्रभूमि में मुझे एक चेकबॉक्स अपडेट करना होगा जो इंगित करता है कि यह विशिष्ट अलार्म अब और सेट नहीं है! :-( – Zordid

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