Ora*_*bîg 12 java file-io android file
好吧,这不是一个问题,因为我并没有真正"卡住"我的代码,但我发现Android API在访问外部存储和File.createTempFile()方法方面有一些奇怪的行为,而我我想了解发生了什么......
请注意我的清单不包括<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">.
第1部分 :
我有以下的代码,做工作的魅力:
File tempFile = new File(Environment.getExternalStorageDirectory(),
"my_temp_file.png");
Run Code Online (Sandbox Code Playgroud)
它为我创建了一个临时文件,我可以毫不费力地在其中写入数据.
问题1:为什么它有效,因为我不应该在SDCard上拥有写作权限?
第2部分 :
我试图改变我的代码使用createTempFile哪个是官方方法来创建临时文件.所以我试过了:
File tempFile = File.createTempFile("my_temp", "png",
Environment.getExternalStorageDirectory());
Run Code Online (Sandbox Code Playgroud)
并在manifest.xml中添加了WRITE_EXTERNAL_STORAGE.你猜怎么着 ?这不起作用,我得到一个java.io.IOException:
09-07 14:07:29.061: E/_CLOG(19982): java.io.IOException: Permission denied
09-07 14:07:29.061: E/_CLOG(19982): at java.io.File.createNewFileImpl(Native Method)
09-07 14:07:29.061: E/_CLOG(19982): at java.io.File.createNewFile(File.java:1257)
09-07 14:07:29.061: E/_CLOG(19982): at java.io.File.createTempFile(File.java:1322)
09-07 14:07:29.061: E/_CLOG(19982): at com.(...).onClick(ProfileImageUpdater.java:58)
Run Code Online (Sandbox Code Playgroud)
问题2:为什么这不起作用,而imho呢?
Pri*_*tel 14
试试这样......
File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);
Run Code Online (Sandbox Code Playgroud)
编辑:
对于问题2
它可能是以下链接的问题...
Environment.getExternalStorageDirectory不返回可移动存储的路径
Ora*_*bîg -1
我终于明白发生了什么事...
问题 1:事实上,创建的文件是供系统应用程序用来从用户图库中检索和裁剪图像的。因此,我的应用程序不必拥有 WRITE_EXTERNAL_STORAGE 权限,因为该文件是由系统本身写入的。
问题 2:我不确定。我猜想 Android 不允许在我尝试的地方创建临时文件(因为它不是正确的位置)