30

मैं एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं। मैं एंड्रॉइड 2.2क्या मुझे सेवा के भीतर साझा वरीयताओं से डेटा मिल सकता है?

मेरे आवेदन में मैं जीपीएस डेटा कैप्चर कर रहा हूं और इसे 1 घंटे के अंतराल के साथ सेवा में भेज रहा हूं। यदि उपयोगकर्ता आवेदन से बाहर निकलता है तो यह भी काम कर रहा है (यह आवश्यक है)।

मैं 2 सेवाओं (उपयोगकर्ता परिभाषित) का उपयोग कर रहा हूं, एक जीपीएस डेटा कैप्चर करने के लिए और सर्वर को भेजने के लिए अन्य।

यहाँ मेरी संदेह

  • सेवा में, हम साझा वरीयताओं का उपयोग कर सकते हैं।

  • यदि हम एप्लिकेशन की किसी भी गतिविधि में साझा प्राथमिकताओं में कोई भी डेटा संग्रहीत करते हैं, तो क्या हम उस डेटा को साझा प्राथमिकताओं की सहायता से सेवा में उपयोग करने में सक्षम होंगे?

+0

सबसे अच्छा उत्तर यहां मिला http://stackoverflow.com/questions/6446221/get-context-in-a-service?lq=1 –

उत्तर

11


मुझे समाधान मिल गया।
एक सेवा हम फोन के लिए निम्न विधि उपरोक्त कोड में साझा वरीयताओं

myapp.bmodel.getApplicationContext().getSharedPreferences("myPrefs_capture_gps_per_hour", Context.MODE_PRIVATE); 


पाने के लिए अंदर MyApp आवेदन वर्ग के एक वस्तु जो आवेदन

7

साझा प्राथमिकताओं तक पहुंच प्राप्त करने के लिए आपको एक संदर्भ की आवश्यकता है। सबसे अच्छा तरीका है Application वर्ग के एक वंशज के रूप में MyApplication बनाने के लिए, वहाँ का दृष्टांत preferences और MyApplication.preferences के रूप में अपने आवेदन के बाकी हिस्सों में उन्हें इस्तेमाल है:

public class MyApplication extends Application { 
    public static SharedPreferences preferences; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     preferences = getSharedPreferences(getPackageName() + "_preferences", MODE_PRIVATE); 

उदाहरण के लिए, यदि आप कहीं और अपनी प्राथमिकताएँ के लिए उपयोग की आवश्यकता है, आप प्राथमिकताओं को पढ़ा को यह कह सकते हैं:

String str = MyApplication.preferences.getString(KEY, DEFAULT); 

या आप वरीयताओं के लिए कुछ सहेजने के लिए इस फोन कर सकते हैं:

MyApplication.preferences.edit().putString(KEY, VALUE).commit(); 

(जोड़ने या प्राथमिकताओं को बदलने के बाद commit() कॉल करने के लिए मत भूलना!)

+2

यह तकनीकी रूप से काम करेगा, लेकिन आप अभी उपलब्ध 'प्राथमिकता प्रबंधक का उपयोग क्यों नहीं करेंगे #getDefaultSharedPreferences (संदर्भ संदर्भ); 'स्थिर विधि? यह वही है जो इसके लिए है। – twaddington

+1

@twaddington आपको अधिक सावधानी से पढ़ना चाहिए। मेरा उत्तर वरीयताओं तक पहुंच की अनुमति देता है जब 'संदर्भ' ** ** उपलब्ध नहीं है। – lenik

+2

निश्चित रूप से, लेकिन वह विशेष रूप से 'गतिविधि' और 'सेवा' में साझा प्राथमिकताओं का उपयोग करने के बारे में पूछ रहा है, जिनमें से दोनों में 'संदर्भ' उपलब्ध है। – twaddington

5

हाँ शिवकुमार, आप अपने शेयर वरीयताओं के रूप में सामान्य सेवाओं के किसी भी प्रकार के रूप में आप अपनी गतिविधि में उपयोग कर रहे हैं का उपयोग कर सकते हैं।

एक ही तरह

SharedPreferences preferences = getSharedPreferences("<PrefName>", 
      MODE_PRIVATE); 
+0

सरल! इसी प्रकार GetResources, getString, आदि के लिए ... IntentService क्लास संदर्भ से विरासत में मिलता है। –

35

आप कर सकते हैं PreferenceManager.getDefaultSharedPreferences(Context context) फोन करके डिफ़ॉल्ट साझा वरीयताओं उदाहरण है, जो अपने सभी Activity और Service वर्गों में साझा किया जाता है, का उपयोग:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 

यह सरल भंडारण के लिए अच्छा है primitives (बुलियन की तरह) या serializable वस्तुओं। हालांकि, यदि आप बहुत से स्थान डेटा को कैप्चर कर रहे हैं, तो आप इसके बजाय SQLite डेटाबेस का उपयोग करने पर विचार कर सकते हैं।

+1

यह उत्तर इस के साथ संयुक्त है: सेवा के भीतर संदर्भ ऑनस्टार्ट या ऑनस्टार्ट कमांड तक सेवाओं में दिखाई नहीं देगा: http://stackoverflow.com/questions/7619917/how-to-get-context-in-android-service-class मेरे लिए यह हल किया। – class

+0

आप हमेशा सेवा की 'getAplicationContext()' विधि के परिणामस्वरूप पास कर सकते हैं। – twaddington

+0

@twaddington तो अगर हम 'getSharedPreferences (स्ट्रिंग, संदर्भ) का उपयोग करते हैं तो प्राथमिकताओं को साझा नहीं किया जाएगा? – Sohaib

1

रहे हैं निर्धारित किया जाता है SharedPreference का उदाहरण बनाने के दो तरीके:

केस 1:

SharedPreferences preferences = activity.getSharedPreferences("<PrefName>", MODE_PRIVATE); 

केस 2:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

सूचना यदि आप एक ही नाम (मामले 1) या उसी संदर्भ (मामले 2) भी विभिन्न स्थानों पर साथ एक प्राथमिकता बनाने के लिए, यह अभी भी एक ही है, और कर सकते हैं स्पष्ट रूप से डेटा साझा करें।

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