2010-06-23 11 views
9

मेरी Android एप्लिकेशन वरीयताओं के दो प्रकार के होते हैं:उपयोगकर्ता प्राथमिकताएं फ़ाइल बनाम अनुप्रयोग वरीयताओं फ़ाइल

1) मैं उपयोगकर्ता वरीयताओं/xml/preferences.xml रेस में परिभाषित ताकि उपयोगकर्ताओं को एक PreferenceActivity के साथ उनकी प्राथमिकताएं प्रबंधित कर सकते है ।

2) मैं वैश्विक विन्यास वरीयताओं मेरे ऐप्लिकेशन के के लिए एक और फ़ाइल को परिभाषित करना चाहते हैं।

मेरी ऐप कॉन्फ़िगरेशन वरीयताओं को प्रबंधित करने का सबसे अच्छा तरीका क्या है? क्या मुझे कॉन्फ़िगरेशन मानों के साथ एक और एक्सएमएल फ़ाइल बनाना चाहिए या क्या मुझे उन कॉन्फ़िगरेशन मानों को स्ट्रिंग्स.एक्सएमएल में निर्दिष्ट करना चाहिए? कॉन्फ़िगरेशन वरीयताओं के प्रबंधन के लिए सबसे अच्छा अभ्यास क्या है?

उत्तर

6

पसंद फाइलों में नहीं storead हैं परियोजना की /res/xml/defaults.xml

वे

/data/data/com.your.pkg/default.prefs 

की तरह में अपने आवेदन फ़ोल्डर कुछ डिवाइस पर जमा हो जाती है फ़ाइल नाम निर्दिष्ट नहीं करते, जैसा कि आप कुछ करना होगा की कोशिश करो How do I get preferences to work in Android?

SharedPreferences preferences = PreferenceManager 
        .getDefaultSharedPreferences(context); 
: वरीयता फाइलों के साथ समस्याओं, इस ओपी की तरह इस सवाल में था

तो फिर तुम शायद

preferences.getString('weightPref', null); 

कई एप्लिकेशन क्वेरी करने के लिए एक विशिष्ट अनुप्रयोग या एक गतिविधि की सेटिंग्स पर उपयोगकर्ता वरीयताओं पर कब्जा करने के लिए एक रास्ता प्रदान कर सकता है होगा। इसका समर्थन करने के लिए, एंड्रॉइड एपीआई का एक सरल सेट प्रदान करता है।

प्राथमिकताएं आम तौर पर नाम मूल्य जोड़े होती हैं। उन्हें किसी एप्लिकेशन में विभिन्न गतिविधियों में "साझा प्राथमिकताएं" के रूप में संग्रहीत किया जा सकता है (वर्तमान में नोट करें कि इसे प्रक्रियाओं में साझा नहीं किया जा सकता है)। या यह ऐसा कुछ हो सकता है जिसे किसी गतिविधि के लिए विशिष्ट रूप से संग्रहीत करने की आवश्यकता हो।

  1. साझा प्राथमिकताएं: साझा प्राथमिकताओं को अनुप्रयोगों से सभी घटकों (गतिविधियों, सेवाओं आदि) द्वारा उपयोग किया जा सकता है।

  2. गतिविधि की प्राथमिकताएं हैंडल: इन प्राथमिकताओं का उपयोग केवल गतिविधि में ही किया जा सकता है और एप्लिकेशन के अन्य घटकों द्वारा इसका उपयोग नहीं किया जा सकता है।

साझा प्राथमिकताएं:

साझा वरीयताओं Context वर्ग के getSharedPreferences विधि की मदद से प्रबंधित कर रहे हैं। वरीयताओं को एक डिफ़ॉल्ट फ़ाइल (1) में संग्रहीत किया जाता है या आप वरीयताओं को संदर्भित करने के लिए उपयोग किए जाने के लिए फ़ाइल नाम (2) निर्दिष्ट कर सकते हैं।

(1) यहाँ जब आप फ़ाइल नाम

public static final String PREF_FILE_NAME = "PrefFile"; 
    SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 

MODE_PRIVATE निर्दिष्ट वरीयताओं के लिए ऑपरेटिंग मोड है कि कैसे आप उदाहरण मिलता है। यह डिफ़ॉल्ट मोड है और इसका मतलब है कि बनाई गई फ़ाइल केवल कॉलिंग एप्लिकेशन द्वारा एक्सेस की जाएगी। समर्थित अन्य दो मोड MODE_WORLD_READABLE और MODE_WORLD_WRITEABLE हैं।MODE_WORLD_READABLE में अन्य एप्लिकेशन बनाई गई फ़ाइल को पढ़ सकते हैं लेकिन इसे संशोधित नहीं कर सकते हैं। MODE_WORLD_WRITEABLE के मामले में अन्य अनुप्रयोगों में भी बनाई गई फ़ाइल के लिए लेखन अनुमतियां होती हैं।

(2) सुझाया गया तरीका

SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context); 

अंत में फ़ाइल नाम निर्दिष्ट किए बिना, डिफ़ॉल्ट मोड द्वारा उपयोग करने के लिए है, एक बार आप वरीयताओं उदाहरण है, आपके द्वारा संग्रहीत पुनः प्राप्त कर सकते है वरीयताओं से को महत्व देता है:

int storedPreference = preferences.getInt("storedInt", 0); 

करने के लिए दुकान वरीयता फ़ाइलमें को महत्व देता हैऑब्जेक्ट का उपयोग किया जाना चाहिए। EditorSharedPreference कक्षा का नेस्टेड इंटरफ़ेस है।

SharedPreferences.Editor editor = preferences.edit(); 
editor.putInt("storedInt", storedPreference); // value to store 
editor.commit(); 

remove() और clear() तरह के तरीकों संपादक भी समर्थन फ़ाइल से वरीयता मूल्य नष्ट करने के लिए।

गतिविधि पसंद:

साझा वरीयताओं अन्य एप्लिकेशन घटकों द्वारा उपयोग किया जा सकता है। लेकिन अगर आपको वरीयताओं को अन्य घटकों के साथ साझा करने की आवश्यकता नहीं है और गतिविधियों को निजी प्राथमिकताएं रखना चाहते हैं। आप गतिविधि के getPreferences() विधि की सहायता से ऐसा कर सकते हैं। getPreference विधि प्राथमिकता फ़ाइल नाम के लिए गतिविधि वर्ग के नाम के साथ getSharedPreferences() विधि का उपयोग करती है।

बाद वरीयताओं

SharedPreferences preferences = getPreferences(MODE_PRIVATE); 
int storedPreference = preferences.getInt("storedInt", 0); 

मान संग्रहीत करने के लिए कोड प्राप्त करने के कोड है भी साझा वरीयताओं के मामले में के रूप में ही है।

SharedPreferences preferences = getPreference(MODE_PRIVATE); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putInt("storedInt", storedPreference); // value to store 
editor.commit(); 

तुम भी डेटाबेस में गतिविधि राज्य भंडारण जैसे अन्य तरीकों का उपयोग कर सकते हैं। नोट एंड्रॉइड में android.preference नामक एक पैकेज भी शामिल है। पैकेज एप्लिकेशन वरीयताओं UI को लागू करने के लिए कक्षाओं को परिभाषित करता है।

कुछ और उदाहरण जाँच डेवलपर्स साइट पर Android के Data Storage पोस्ट देखने के लिए।

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckBoxPreference android:key="gpsOn" 
        android:summaryOff="GPS is Off" 
        android:summaryOn="GPS is On" 
        android:title="GPS State"></CheckBoxPreference> 

मैं तुम्हें एक PreferenceActivity का उपयोग अपने xml से प्राथमिकताएं लोड करने में मान:

+0

कृपया [ "यहाँ" लिंक पाठ के रूप में उपयोग नहीं करते या "यहाँ क्लिक करें"] (http://www.w3.org/QA/Tips/noClickHere.html)। धन्यवाद! –

+0

मैं क्या करना चाहता हूं एक उपयोगकर्ता पक्ष प्राथमिकता xml फ़ाइल को res/xml/preferences.xml में डिफ़ॉल्ट मानों के साथ परिभाषित करने के लिए है, जैसा कि आपने बताया है कि मैं इन प्राथमिकताओं को निम्न के साथ प्राप्त कर सकता हूं: वरीयता प्रबंधक .getDefaultSharedPreferences (संदर्भ); दूसरी ओर मैं अपनी ऐप को कॉन्फ़िगर करने के लिए किसी अन्य फ़ाइल में अन्य प्रकार की वरीयताओं को परिभाषित करना चाहता हूं (उपयोगकर्ता इन कॉन्फ़िगरेशन प्राथमिकताओं को प्रबंधित नहीं कर सकते हैं, केवल मेरे ऐप का कोड उन्हें पढ़ने में सक्षम होगा)। मेरा प्रश्न यह है कि मैं इन कॉन्फ़िगरेशन वरीयताओं के लिए डिफ़ॉल्ट मान कहां निर्दिष्ट कर सकता हूं, यदि मेरे पास पहले से उपयोगकर्ता प्राथमिकताओं (res/xml/preferences.xml) के लिए फ़ाइल है। – whynot

+0

जोआचिम एक अच्छा मुद्दा बनाता है। फिक्स्ड। – MatrixFrog

1

हमें लगता है कि अपने xml इस तरह पढ़ता करते हैं। तो आपकी गतिविधि में आप addPreferencesFromResource(R.xml.application_pref);

जब आप इसे डिफ़ॉल्ट रूप से करते हैं, तो सभी मान डिफ़ॉल्ट रूप से एप्लिकेशन के साझा साझाकरण में संग्रहीत होते हैं। आप कहीं भी चाहें इन वरीयताओं तक पहुंच सकते हैं। तो कुछ अन्य गतिविधि/सेवा से सिर्फ कार्य करें:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
boolean value = prefs.getBoolean("gpsOn", false); 

और सिर्फ इतना है कि आप value में उपयोगकर्ता की प्राथमिकता मिलना चाहिए पसंद है।

0

शायद किसी ऐप के लिए वैश्विक विन्यास प्राथमिकताओं को सेट करने का सबसे अच्छा तरीका एंड्रॉयड प्रकट में मेटा डेटा तत्वों को परिभाषित करने के लिए है

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