एक सेवा में संदर्भ प्राप्त करें


280

वहाँ एक Contextसे प्राप्त करने के लिए कोई विश्वसनीय तरीका है Service?

मैं एक प्रसारण रिसीवर पंजीकृत करना चाहता हूं, ACTION_PHONE_STATE_CHANGEDलेकिन मुझे यह जानकारी प्राप्त करने के लिए मेरे ऐप की आवश्यकता नहीं है, इसलिए मैं इसे नहीं डालता Manifest

हालाँकि, मुझे प्रसारण रिसीवर जीसी द्वारा नहीं मारा जा सकता है जब मुझे इस जानकारी की आवश्यकता होती है तो मैं प्रसारण रिसीवर को एक में पंजीकृत कर रहा हूं Service

इसलिए, मुझे Contextकॉल करने की आवश्यकता है registerReceiver()। जब मुझे अब आवश्यकता नहीं है तो ACTION_PHONE_STATE_CHANGEDमैं इसे अपंजीकृत करूंगा ।

कोई सुझाव?

जवाबों:


780

3
मुझे यह समस्या थी, लेकिन यह पता चला कि यह श्रमिक धागा था जिसका कोई संदर्भ नहीं था। मैंने थ्रेड का निर्माण करते समय इसे मेरे संदर्भ को हल कर दिया।
ctrl-alt-delor-

17
नोट: सेवा के भीतर संदर्भ onStart या सेवाओं में onStartCommand तक दिखाई नहीं देगा: stackoverflow.com/questions/7619917/…
वर्ग


4
प्राप्त उत्तर और उत्तोलन के आकार पर विचार करते हुए, मुझे नहीं लगता कि SO में कोई अन्य उत्तर इस धड़कता है :)
अमृता-पनी

2
इन 4 शब्दों ने मेरी समस्या को हल कर दिया है जिसे मैं 3 घंटे तक हल करने की कोशिश कर रहा हूं।
निरुप अय्यर

64

Serviceफैली हुई है ContextWrapperजो फैली हुई है Context। इसलिए Serviceए है Context'this'सेवा में कीवर्ड का उपयोग करें ।



8

चूंकि Serviceएक है Context, चर संदर्भ होना चाहिए this:

DataBaseManager dbm = Utils.getDataManager(this);   

5

जैसा कि सेवा पहले से ही एक संदर्भ है

आप इसे भी प्राप्त कर सकते हैं:

Context mContext = this;

या

Context mContext = [class name].this;  //[] only specify the class name
// mContext = JobServiceSchedule.this; 

1

किसी के होने की स्थिति में NullPointerException, आपको संदर्भ प्राप्त करने की आवश्यकता हैonCreate().

Servicea है Context, इसलिए ऐसा करें:

@Override
public void onCreate() {
    super.onCreate();
    context = this;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.