android createTempFile throws permission denied?

28,939

Solution 1

You need to create the temp files in a directory that your application owns. You should use createTempFile(String prefix, String suffix, File directory), where directory is the location to which the temp file is to be written. You can get a valid location for directory with the result from Context.getFilesDir() or Context.getDir(String name, int mode).

Solution 2

I think that you just missed the permission to write at the external storage, since temp files are created there by default. Add

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

to your manifest and it should work.

Solution 3

Even after adding <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" this to manifest I was getting error. But after adding this android:requestLegacyExternalStorage="true" in application tag of manifest file I am able to createTempFile and able capture pic from phone.

<application android:requestLegacyExternalStorage="true"

Share:
28,939
mobibob
Author by

mobibob

mobile application developer providing end-to-end content and technology integration

Updated on July 22, 2020

Comments

  • mobibob
    mobibob almost 4 years

    This is simple, but not working. I am trying to create a temp file (later a permanent storage file) for preview of an MP3 file. I have tried the following variants of the suffix as following example:

    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();
            }
    
        }
    }
    

    Log:

    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)
    

    Is there some AndroidManifest.xml setting that I am missing (I am using default manifest)?