2010-11-10 13 views
43

मैं एक ऐसा एप्लिकेशन बना रहा हूं जो अलार्ममेनगर के माध्यम से अलार्म ट्रिगर करता है।गैर-गतिविधि कक्षा में getSystemService का उपयोग कैसे करें?

मैं अलार्म को अपनी स्वयं की गैर-गतिविधि कक्षा के माध्यम से कॉल करने में सक्षम होना चाहता हूं, लेकिन चूंकि मैं गतिविधि का विस्तार नहीं कर रहा हूं, इसलिए मुझे कोई 'संदर्भ' नहीं दिखता है। यह अवधारणा मुझे भ्रमित करती है, और मैंने एसडीके दस्तावेज़ पढ़े हैं। मेरी गैर activty कक्षा में

alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 

:

मैं कैसे उपयोग करने के बारे जाना चाहते हैं?

साथ ही, मुझे लगता है कि संदर्भ प्राप्त करने से मुझे मेरी गैर-गतिविधि कक्षा में साझा किए गए पर्सफेंट और इरादों का उपयोग करने की अनुमति मिल जाएगी?

उत्तर

36

आप गैर गतिविधि वर्ग के लिए संदर्भ है जिसमें पसंदीदा तरीका है पारित कर सकते हैं या आप एक सिंगलटन जो आप आवेदन के भीतर कहीं भी संदर्भ तक पहुंच सकते हैं करने के लिए आवेदन के आधार संदर्भ संपुटित सकता है। कुछ मामलों में यह एक अच्छा समाधान हो सकता है लेकिन दूसरों में यह निश्चित रूप से अच्छा नहीं है।

वैसे भी, अगर आप AlarmManager के माध्यम से एक अलार्म ट्रिगर करते हैं मैं बहुत यकीन है कि अलार्म IntentService से अभी तक एक Service से विरासत या बेहतर चाहिए हूँ और ऐसे मामलों में आप this.getBaseContext() या this.getApplicationContext()

+1

क्या यह संदर्भ पास करने के लिए सलाह दी जाती है? क्या यह संदर्भ रिसाव का नेतृत्व नहीं करता है? – Amit0191

4

आपको गैर-गतिविधि वर्ग में संदर्भ पारित करने की आवश्यकता है।

16

Service और ActivityContext से विरासत - इसलिए जब आप इन कक्षाओं में getSystemService बुला रहे हैं, तो आप वास्तव में बुला रहे हैं super.getSystemService। कोड का नमूना:

आप एक Context एक और कक्षा में उपलब्ध करना चाहते हैं, तो आप एक है कि वर्ग की एक विधि के लिए एक तर्क के रूप आदि

संपादित पारित कर सकते हैं, यह करने के लिए एक संदर्भ के रखने के लिए,। लेकिन गंभीरता से, यह है अत्यधिक मूल - यदि आप विरासत और विधियों को समझते हैं।

class MyActivity extends Activity { // Activity extends Context, so MyActivity also extends Context 
    void someMethod() { 
    MyOtherClass.useStaticContext(this); 
    MyOtherClass instance = new MyOtherClass(); 
    instance.useInstanceContext(this.getApplicationContext()); 
    } 
} 
class MyOtherClass { 
    static void useStaticContext(Context context) { 
    } 
    void useInstanceContext(Context context) { 
    } 
} 
+2

मुझे लगता है कि मैं समझता हूं कि आपका क्या मतलब है। क्या आपको पता चलेगा कि मुझे रेपो में इसका नमूना कोड कहां मिल सकता है? धन्यवाद! – eportermd

12
के माध्यम से संदर्भ के लिए उपयोग किया

आप निम्न का प्रयास कर सकते हैं, यह आपको वर्तमान संदर्भ प्राप्त करने की अनुमति देता है जिससे दृश्य चल रहा है।

alarmTest = (AlarmManager)this.getContext().getSystemService(Context.ALARM_SERVICE); 
संबंधित मुद्दे