2011-06-30 16 views
9

मुझे समझ में नहीं अनुप्रयोग स्तर स्कोप साझा तर्क/डेटा को परिभाषित करने में सक्षम हो के लिए उपलब्ध नहीं है, और प्रत्येक गतिविधि अनिवार्य रूप से एक अकेले खड़े आवेदन प्रकट द्वारा एक साथ बंधे है कि ...एंड्रॉयड अनुप्रयोग स्तर स्कोप चर

लेकिन मेरे पास उपयोगकर्ता पहुंच अनुमतियों का एक समूह है जो मुझे वेब सेवा कॉल के माध्यम से मिल रहा है और यह कॉल हर गतिविधि में onCreate() में नहीं बनाना चाहता।

मैं आवेदन में SharedPreferences का उपयोग कर रहा हूं, लेकिन चूंकि अनुमतियां उपयोगकर्ता द्वारा संपादन योग्य नहीं हैं, इसलिए एंड्रॉइड उपकरणों पर फ्लैट फ़ाइल एक्सपोजर इसे संभालने के लिए एक असुरक्षित तरीका की तरह लगता है।

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

मुझे IntentExtras के बारे में पता है लेकिन हम एक सेटिंग "ऑब्जेक्ट" के बारे में बात कर रहे हैं, न कि एक प्राचीन प्रकार।

इस स्थिति को संभालने का सही तरीका?

+0

एक सिंगलटन बनाएं, पहली बार जब आप उन्हें चाहते हैं तो इन चरों को लोड करें, फिर स्थिर गेटर्स – Blundell

उत्तर

28

आप वास्तव में एक "एप्लिकेशन" कक्षा बना सकते हैं जिसका उपयोग अनिवार्य रूप से एप्लिकेशन विस्तृत सेटिंग्स बनाने के लिए किया जा सकता है।

बस एक नई कक्षा बनाएं और एप्लिकेशन का विस्तार करें, फिर किसी भी वर्ग के सदस्यों और उपयुक्त गेटर/सेटर विधियों को सेट करें और आप उन्हें अपने पूरे एप्लिकेशन तक एक्सेस कर सकते हैं।

फिर आप इस प्रकार अपने प्रकट अद्यतन करने की आवश्यकता:

<application android:icon="@drawable/logo" 
      android:label="@string/app_name" 
      android:name=".application.CustomApplication"> 

तो किसी भी गतिविधि में आप इसे इस रूप में उपयोग कर सकते हैं:

CustomApplication app = ((CustomApplication)getApplication()); 
+1

क्या इस जानकारी को स्थिर होना चाहिए? या 'getAplication()' आपको पहले से ही तत्काल ऑब्जेक्ट लौटाता है जो पूरे जीवन चक्र में रहता है? – jondavidjohn

+1

नहीं, स्थिर होने की आवश्यकता नहीं है, प्राप्त करें तत्काल एप्लिकेशन ऑब्जेक्ट प्राप्त होता है (ऐप चलने पर एप्लिकेशन क्लास हमेशा तत्काल होता है) – rhinds

+0

कमाल, यह सही काम करना चाहिए, परीक्षण करने के बाद स्वीकार किया जाएगा। – jondavidjohn

1

मुझे लगता है कि साझा प्राथमिकताओं का उपयोग काफी सुरक्षित है। जड़, कस्टम रोम और हैकिंग ज्ञान के साथ केवल उन्नत उपयोगकर्ता ही इसका मौका ले सकेंगे! (मुझे यह भी यकीन नहीं है कि यह संभव होगा)।

साझा किए गए संदर्भों के अलावा, आप कस्टम एप्लिकेशन ऑब्जेक्ट को भी कार्यान्वित कर सकते हैं और वहां अपनी अनुमतियां रख सकते हैं।

वैसे भी, एक डेवलपर के रूप में मुझे लगता है कि उपयोगकर्ता अनुमतियों (https का उपयोग, आदि) प्राप्त करने के लिए अनुरोध के भीतर कहीं कहीं हैक किया जा सकता है और मेरा आवेदन डिकंपिल्ड हो रहा है।

+0

डिकंपिल्ड होने के बारे में चिंतित नहीं, साझा किए गए prefs एक अनएन्क्रिप्टेड फ्लैट फ़ाइल में जाते हैं। किसी को "जानकारी" प्राप्त करने के बारे में चिंतित नहीं है, केवल निष्पादन (समायोजन समायोजन आदि) के दौरान संपादन के बारे में चिंतित है। – jondavidjohn

+0

और नहीं, मैं बल्कि उच्चतम आम संप्रदाय के साथ दिमाग में डिजाइन करना चाहता हूं, और इन दिनों आपको यह मानना ​​चाहिए कि आपका उपयोगकर्ता जड़ है और adb तक पहुंच है। – jondavidjohn

+0

फिर, डेटा को स्मृति में संग्रहीत करें (कस्टम एप्लिकेशन ऑब्जेक्ट का उपयोग करके) –

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