代码之家  ›  专栏  ›  技术社区  ›  mobibob

android createTempFile抛出权限被拒绝?

  •  12
  • mobibob  · 技术社区  · 14 年前

    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文件缺少的设置(我使用的是默认清单)?

    2 回复  |  直到 14 年前
        1
  •  19
  •   Thomasleveil    9 年前

    您需要在应用程序拥有的目录中创建临时文件。你应该使用 createTempFile(String prefix, String suffix, File directory) ,在哪里 目录 临时文件要写入的位置。您可以获取的有效位置 Context.getFilesDir() Context.getDir(String name, int mode) .

        2
  •  14
  •   Thomasleveil    9 年前

    我认为您刚刚错过了在外部存储器中写入的权限,因为默认情况下临时文件是在那里创建的。

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

    你的名单上,它应该工作。

        3
  •  3
  •   Prabhu    4 年前

    即使在添加 < 但加上这个之后 在清单文件的应用程序标签,我能够创建tempfile,并能够从手机捕获图片。

    <应用android:requestLegacyExternalStorage请求外部存储=“正确”