2011-09-28 13 views
8

मैं अपने ApplicationContext और दोनों उपयोग करने की कोशिश मौजूद है मेरी Service के Context बाहरी निर्देशिका का उपयोग करने की मांग की। दुर्भाग्यवश, यह null लौटाता रहता है, और लॉगकैट रिपोर्ट करता है कि यह बाहरी निर्देशिका बनाने में असमर्थ था। मुझे यकीन है कि मेरे पास WRITE_STORAGE_PERMISSION मौजूद है, लेकिन यह अभी भी काम नहीं करेगा। मेरा डिवाइस एपीआई 10 (2.3.3) वेनिला एंड्रॉइड चला रहा है। कोई विचार?Android में बाहरी फ़ाइलें Dir नहीं बना सकते हैं। WRITE_EXTERNAL_STORAGE

यहाँ मेरी प्रकट है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="droid.signboard" android:versionCode="1" 
android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10" /> 


<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 



<application android:icon="@drawable/icon" android:label="@string/app_name" 
    android:name="SignboardApp"> 
    <receiver android:name=".ApplicationStarter"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"></action> 
      <action android:name="droid.signboard.LAUNCHER_START"></action> 
     </intent-filter> 
    </receiver> 
    <activity android:label="@string/app_name" 
     android:screenOrientation="landscape" android:launchMode="singleTop" 
     android:name=".view.Signboard"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"></action> 
      <category android:name="android.intent.category.LAUNCHER"></category> 
     </intent-filter> 
    </activity> 
    <service android:name=".controller.MasterControllerService"> 
     <intent-filter> 
      <action 
       android:name="droid.signboard.LAUNCH_SERVICE_FROM_ACTIVITY"></action> 
     </intent-filter> 
    </service> 


</application> 
</manifest> 

और यहाँ है, जहाँ कोड को खराब करता है:

private boolean canWriteEx() { 

    String state = Environment.getExternalStorageState(); 

    if (state.equals (Environment.MEDIA_MOUNTED)) { 
     Log.i (TAG, "Can write to external directory: " 
       + context.getExternalFilesDir (null).getAbsolutePath()); 
     return true; 
    } else { 
     Log.i (TAG, "Cannot write to external directory: " 
       + context.getExternalFilesDir (null).getAbsolutePath()); 
     return false; 
    } 
} 

कोड एक Runnable की एक विधि है, कि एक Service द्वारा कहा जाता है। Runnable का निर्माता Context अपने पैरामीटर के रूप में लेता है। कोड द्वारा उपयोग किया गया यह Context है। कोड फेंकता लॉग पर एक अपवाद फोन कि सफल होता है, जिसका अर्थ है कि बाहरी मेमोरी मौजूद और उपलब्ध है।

का प्रयास सुधारों की अद्यतन:

एक साफ स्थापित काम नहीं करता।
एपीआई 9 पर वापस लौटना काम नहीं करता है, हालांकि यह पहले काम करता था।

+0

पोस्ट अपनी AndroidManifest.xml फ़ाइल। – Otra

+0

अपना कोड, और कोई भी प्रासंगिक स्टैक निशान पोस्ट करें। इसके बिना हम अंधेरे में शॉट्स अनुमान लगा सकते हैं। – FoamyGuy

+0

आप क्या करने की कोशिश कर रहे हैं? आप संदर्भ क्यों बुला रहे हैं .getExternalFilesDir (शून्य)? हमें उद्देश्य बताएं और हम आपको बेहतर लक्ष्य बना सकते हैं। इसके अलावा, आपके लॉगकैट से स्टैक ट्रेस उपयोगी होगा। – IncrediApp

उत्तर

9

फिक्स्ड, लेकिन मुझे नहीं पता कि यह अब क्यों काम करता है। मैं डिवाइस रिबूट, तो अचानक, यह फिर से काम करेगा; Context#getExternalFilesDir()null लौटाना बंद कर दिया। भले ही यह अब काम करता है (धन्यवाद और The IT Crowd के रॉय और मॉस के लिए प्रोप), क्या मुझे इसकी रिपोर्ट Google या कुछ करना चाहिए?

+3

यह काम करता है लेकिन मेरे ऐप के डेटा को साफ़ करने के बाद कभी-कभी वापस आता है। – offex

2

आपने अपने AndroidManifest.xml में WRITE_EXTERNAL_STORAGE अनुमति की आवश्यकता है। कम से कम, यह मेरे लिए क्या हल किया है।

अपने <application ... लाइन से पहले लाइन <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> जोड़ें।

+0

मुझे आश्चर्य है कि इसके लिए 3 अलग-अलग मूल कारण हैं। – likejiujitsu

+2

वह पहले से ही इस अनुमति सेट है। – Vincent

+0

यह अजीब बात है, मैंने आवेदन लाइन _before_ को अनुमति दी है और यह अब काम करता है। बीच में रीबूट किया लेकिन कई बार पहले से ही किया। धन्यवाद। – John

6

यह एक पुरानी धागा है, लेकिन मैं सिर्फ एक ही समस्या में पड़ गए और कारण जो मैं हैरान हूँ पाया आम नहीं है। (4290) डब्ल्यू/ApplicationContext: मैं बाहरी संग्रहण पर लिखने की, जबकि मेरी डिवाइस .. कंप्यूटर/ग्रहण से जुड़े हुए थे कोशिश कर रहा था और मैं निम्न त्रुटि हो रही थी,

06-25 16: 16: ०९.५६५: बाहरी फाइल निर्देशिका बनाने में असमर्थ 06-25 16: 16: 09.565: डब्ल्यू/System.err (42 9 0): java.io.FileNotFoundException: /full_archive.zip: खुला असफल: ईआरओएफएस (केवल-पढ़ने वाली फाइल सिस्टम) 06- 25 16: 16: 09.565: डब्ल्यू/सिस्टम.एर (42 9 0): libcore.io.IoBridge.open (IoBridge.java:416) 06-25 16: 16: 09.565: डब्ल्यू/System.err (42 9 0): java.io.FileOutputStream पर। (FileOutputStream.java:88) 06-25 16: 16: 09.565: डब्ल्यू/System.err (42 9 0): java.io.FileOutputStream पर। (FileOutputStream.java:73) 06- 25 16: 16: 09.565: डब्ल्यू /System.err(4290): com.seine.trophy.database.DownloaderThread.run (DownloaderThread.java:79) 06-25 16: 16: 09.573: डब्ल्यू/System.err (42 9 0): के कारण: libcore .io.ErrnoException: खुला असफल: EROFS (केवल-पढ़ने के लिए फ़ाइल सिस्टम) 06-25 16: 16: 09.573: डब्ल्यू/System.err (42 9 0): libcore.io.Posix.open (मूल विधि) 06- 25 16: 16: 09.573: डब्ल्यू/सिस्टम.एर (42 9 0): libcore.io.BlockGuardOs.open पर (BlockGuardOs।जावा: 110) 06-25 16: 16: ०९.५७३: डब्ल्यू/System.err (4290): libcore.io.IoBridge.open पर (IoBridge.java:400) 06-25 16: 16: ०९.५७३: डब्ल्यू/System.err (4290): ... 3 अधिक

यह विकासकर्ता गाइड से है ...

सावधानी: यदि उपयोगकर्ता एक कंप्यूटर पर बाह्य भंडारण mounts बाह्य संग्रहण अनुपलब्ध हो सकता है ...

आप अपने कंप्यूटर से फोन अलग करने/आईडीई मेरे लिए समस्या हल हो।

+1

यह वह जवाब था जो मैं साथ आया था। मुझे विश्वास नहीं है कि यह एक और आम समस्या नहीं है और *** बड़े बोल्ड *** में कहीं और अधिक सुलभ नहीं है। – Gowiem

+0

@ToddPainton मुझे यह समस्या नहीं मिली - शायद आपने सेटिंग्स में डेवलपर विकल्प सेट नहीं किए हैं? मैं एंड्रॉइड 4.04 एपीआई 15. सैमसंग एस 2 का उपयोग करता हूं। – likejiujitsu

+0

ओह नहीं जो सेट किया गया था। अंत में मेरा समाधान? एकता। मैं अब देशी एंड्रॉइड प्रोग्रामिंग खड़ा नहीं कर सकता। और एक अतिरिक्त प्लस के रूप में? मैं ऐप्पल को एक ही कोड संकलित कर सकता हूं। –

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