2009-07-30 13 views
29

पर एंड्रॉइड एप्लिकेशन डेटा संग्रहीत करना क्या आंतरिक मेमोरी के बजाय एसडी कार्ड पर एंड्रॉइड एप्लिकेशन डेटा स्टोर करने का कोई तरीका है? मुझे पता है कि एप्लिकेशन स्क्वाइट डेटाबेस को आंतरिक मेमोरी से एसडीकार्ड में कैसे स्थानांतरित करना है, लेकिन क्या होगा यदि आंतरिक मेमोरी पहले स्थान पर पूर्ण हो जाए? यह सब कैसे संभालता है?एसडी कार्ड

उत्तर

9

चेतावनी: यह उत्तर पुराना है। नीचे दिए गए उत्तरों में उल्लिखित एसडी कार्ड के रूट पथ को प्राप्त करने के लिए आपको Environment.getExternalStorageDirectory() का उपयोग करना चाहिए। इसलिए इस मेकअप भावना पर टिप्पणी

ओल्ड उत्तर:

अपना रास्ता अपने Android अनुप्रयोग का उपयोग करने एसडी कार्ड ले जाना चाहिए (कम से कम यह G1 के साथ इस तरह काम करता है) रूट के /sdcard/ जोड़ा जा रहा है। एंड्रॉइड की फाइल सिस्टम ऑब्जेक्ट्स आपको फ़ाइल आकारों की जांच करने की क्षमता देती है ... इसलिए कुछ विफल-ओवर कोड लिखना संभव है (यदि मुश्किल हो)। यदि आंतरिक मेमोरी भर जाती है तो यह कोड आपके रूट पथ को समायोजित करेगा।

+0

कैसे आप रूट पथ समायोजित करूं? – user121196

+0

उस रूट पथ को समायोजित करें जिसका आप उपयोग कर रहे हैं। (यह थोड़ा उलझन में था ... आप एंड्रॉइड के रूट पथ को नहीं बदल सकते हैं) – haseman

+0

मैं डेटाबेस बनाने के लिए SQLiteDatabase का उपयोग कर रहा हूं, हालांकि इसके कन्स्ट्रक्टर के नाम तर्क में कोई पथ नहीं हो सकता है, यह कैसे संभव है कि मैं इसे बनाऊं एसडीकार्ड पर डेटाबेस? – user121196

2

एसडीकार्ड का उपयोग करने में समस्या यह है कि आप विश्वसनीय रूप से यह नहीं मान सकते कि यह हमेशा आपके उपस्थित होने पर उपस्थित रहेगा। आंतरिक स्मृति के साथ यह मामला नहीं है। जब तक आपका एप्लिकेशन चलाने के लिए इस डेटा पर भरोसा नहीं करता है, तब तक यह ठीक होना चाहिए।

76

हार्ड कोड "/ sdcard" से Environment.getExternalStorageDirectory() का उपयोग करना बेहतर अभ्यास है यह हमेशा निश्चित नहीं है कि फ़ोल्डर का नाम उसे कहा जाएगा। इसके अलावा, पर्यावरण वर्ग एक बाहरी एक्स्ट्रास्ट स्टोरेजस्टेट() विधि प्रदान करता है ताकि यह जांच सके कि बाहरी संग्रहण भी उपलब्ध है या नहीं।

+1

यह हमेशा काम नहीं करता है क्योंकि स्पष्ट रूप से सैमसंग का * असली * एसडी कार्ड स्थान 'Environment.getExternalStorageDirectory() +"/external_sd "' है। अन्य उपकरणों में अलग-अलग स्थान होंगे। – Muz

13

यहां एक और साफ छोटी चाल है। Application में कई विधियां हैं जिन्हें पथ प्राप्त करने के लिए बुलाया जाता है। विशेष रूप से एप्लिकेशन में getDatabasePath विधि है जिसका उपयोग पथ बनाने के लिए SQLiteOpenHelper द्वारा किया जाता है। getExternalStorageDirectory में पथ सहित विभिन्न पथ प्रदान करने के लिए एक कस्टम एप्लिकेशन क्लास इन तरीकों को ओवरराइड कर सकता है।

बाहरी संग्रहण या तो एप्लिकेशन विशिष्ट या सार्वजनिक है। क्रमशः getExternalStorageDirectory तंत्र, getExternalFilesDir() और getExternalStoragePublicDirectory() को प्रतिस्थापित करने के तरीके हैं।

3

कुछ डिवाइस का उपयोग/mnt/sdcard एसडी कार्ड के रूट बिंदु के रूप में।

33

शुरू करने के लिए:

मॉडल/ओएस के आधार पर आप के साथ एसडी कार्ड रूट निर्देशिका का उपयोग कर सकते हैं:

File externalStorage = Environment.getExternalStorageDirectory(); 

यह आंतरिक एसडी भंडारण या आंतरिक एसडी मेमोरी के पास भेजेगा।

externalStorage.getAbsolutePath() 

निम्न मान

"/ sdcard /" या "/ mnt/sdcard /"

बाहरी एसडी मेमोरी या माइक्रो एसडी पहुंचने के लिए, कि में से एक वापस आ जाएगी आप आमतौर पर फ़ोन/टेबलेट के बाहर से प्लग, तो आप निम्न फ़ोल्डरों कि android बाहरी मेमोरी को इंगित करने के बनाता है में से एक का उपयोग करना चाहिए:

"/mnt/sdcard/sd" 
"/mnt/sdcard/external_sd" 

"/sdcard/external_sd" 
"/sdcard/sd" 

"/mnt/sdcard/" 

पुनश्च: आप आंतरिक sdcard

स्मृति पर कोई खाली फोल्डर external_sd या sd देख सकते हैं, इस फ़ोल्डर रिक्त है और उसके बाहरी माइक्रो एसडी कार्ड को इंगित करने के लिए इस्तेमाल किया।

अंत में सुनिश्चित करें कि आपने एंड्रॉइड मैनिफेस्ट xml में एसडी कार्ड android.permission.WRITE_EXTERNAL_STORAGE तक पहुंच को पढ़/लिख लिया है।

अंत में आप फ़ाइल नाम निर्दिष्ट करना होगा और अपने तैयार

private SQLiteDatabase DB = null; 

private static final String DATABASE_NAME = "MyDb.db"; 
//////////// 
File sdcard = Environment.getExternalStorageDirectory(); 

String dbfile = sdcard.getAbsolutePath() + File.separator+ "external_sd" + File.separator + DATABASE_NAME; 

DB = SQLiteDatabase.openDatabase(dbfile, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
/////////// 

और अपने जाने के लिए तैयार ...

+1

दुर्भाग्यवश, यह बिल्कुल मानक नहीं है। एलजी ऑप्टिमस पर यह/mnt/sdcard/_ExternalSD में है। मुझे आशा है कि Google पर कोई भी उस सब की समीक्षा करेगा। मीडिया का नामकरण इतना खराब (बाहरी ???) है और दस्तावेज़ एक अंतर्निहित होने पर दूसरे sdcard तक पहुंचने के तरीके के बारे में कोई शब्द नहीं बताते हैं। – Snicolas

+0

क्या आप एसडी कार्ड में मौजूद सभी फ़ोल्डरों का नाम प्राप्त करने में मदद कर सकते हैं। –

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