2010-09-07 23 views
7

यह आसान है, लेकिन काम नहीं कर रहा है। मैं एक एमपी 3 फ़ाइल के पूर्वावलोकन के लिए एक temp फ़ाइल (बाद में एक स्थायी भंडारण फ़ाइल) बनाने की कोशिश कर रहा हूँ। मैं निम्नलिखित उदाहरण के रूप में प्रत्यय के निम्नलिखित वेरिएंट की कोशिश की है:एंड्रॉइड createTempFile अनुमति अनुमति से इनकार कर दिया?

public class StudyFileIo extends Activity { 
    private static final String TAG = "StudyFileIo"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     try { 
      File tempFooFile = File 
      .createTempFile("foo", "dat"); 
      Log.i(TAG, tempFooFile.getAbsolutePath()); 
     } catch (IOException e) { 
      Log.e(TAG, e.toString()); 
      e.printStackTrace(); 
     } 

    } 
} 

प्रवेश करें:

09-07 11:25:20.299 E/StudyFileIo(8859): java.io.IOException: Permission denied 
09-07 11:25:20.299 W/System.err(8859): java.io.IOException: Permission denied 
09-07 11:25:20.299 W/System.err(8859):  at java.io.File.createNewFileImpl(Native Method) 
09-07 11:25:20.299 W/System.err(8859):  at java.io.File.createNewFile(File.java:1160) 
09-07 11:25:20.299 W/System.err(8859):  at java.io.File.createTempFile(File.java:1224) 
09-07 11:25:20.299 W/System.err(8859):  at java.io.File.createTempFile(File.java:1182) 
09-07 11:25:20.299 W/System.err(8859):  at com.mobibob.studyfileio.StudyFileIo.onCreate(StudyFileIo.java:25) 
09-07 11:25:20.299 W/System.err(8859):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
09-07 11:25:20.299 W/System.err(8859):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
09-07 11:25:20.309 W/System.err(8859):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
09-07 11:25:20.309 W/System.err(8859):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
09-07 11:25:20.309 W/System.err(8859):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
09-07 11:25:20.309 W/System.err(8859):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-07 11:25:20.309 W/System.err(8859):  at android.os.Looper.loop(Looper.java:123) 
09-07 11:25:20.309 W/System.err(8859):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
09-07 11:25:20.309 W/System.err(8859):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-07 11:25:20.309 W/System.err(8859):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-07 11:25:20.319 W/System.err(8859):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876) 
09-07 11:25:20.319 W/System.err(8859):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634) 
09-07 11:25:20.319 W/System.err(8859):  at dalvik.system.NativeStart.main(Native Method) 

वहाँ कुछ AndroidManifest.xml सेटिंग है कि मैं याद आ रही है (मैं डिफ़ॉल्ट प्रकट उपयोग कर रहा हूँ) है?

उत्तर

10

आपको उस निर्देशिका में अस्थायी फ़ाइलों को बनाने की आवश्यकता है, जिनके आपके एप्लिकेशन का स्वामित्व है। आपको createTempFile(String prefix, String suffix, File directory) का उपयोग करना चाहिए, जहां निर्देशिका वह स्थान है जहां temp फ़ाइल लिखा जाना है। निर्देशिका के लिए Context.getFilesDir() या Context.getDir(String name, int mode) के परिणाम के साथ आप एक वैध स्थान प्राप्त कर सकते हैं।

+0

धन्यवाद मार्क। मैंने निर्देशिका के साथ फॉर्म की कोशिश की थी, लेकिन मैं अभी भी एक निर्देशिका की आपूर्ति कर रहा था जिसकी मुझे पहुंच नहीं है, getCacheDirectory। आपका सुझाव काम किया। इस बीच, मैंने GetBaseContext() को खोल दिया। OpenFileOutput (...) – mobibob

14

मुझे लगता है कि आपने बाहरी स्टोरेज पर लिखने की अनुमति को याद किया है, क्योंकि डिफ़ॉल्ट रूप से अस्थायी फ़ाइलें बनाई गई हैं।

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

आपके मैनिफेस्ट में जोड़ें और इसे काम करना चाहिए।

+0

यह सही है यदि आप बाहरी संग्रहण पर लिखने का प्रयास करते हैं लेकिन ओपी के लिए, यह मामला नहीं है। –

+2

मेरे लिए काम नहीं किया था। –

+1

[एंड्रॉइड डॉक्स] के अनुसार (http://developer.android.com/training/camera/photobasics.html#TaskPath), आपको अभी भी संस्करण 18 और उससे नीचे की अनुमति की आवश्यकता है। '<उपयोग-अनुमति एंड्रॉइड: नाम =" android.permission.WRITE_EXTERNAL_STORAGE "एंड्रॉइड: maxSdkVersion =" 18 "/>' – Impirator

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