当前位置: 首页 > 面试题库 >

在Android上创建临时文件的最佳方法是什么?

钦景胜
2023-03-14
问题内容

好吧,这并不是一个问题,因为我并没有真正“卡住”我的代码,但是我发现Android
API在访问外部存储设备和File.createTempFile()方法方面有些奇怪的行为, d想了解正在发生的事情…

请注意,我的清单 中不 包含<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">

第1部分 :

我有以下代码,它 确实可以 发挥作用:

File tempFile = new File(Environment.getExternalStorageDirectory(),
                      "my_temp_file.png");

它会为我创建一个临时文件,并且我可以毫无问题地在其中写入数据。

问题1 :为什么该功能有效,因为我不应该拥有SD卡的写入权限?

第2部分 :

我试图将代码更改为使用createTempFile创建临时文件的官方方法。所以我尝试了:

File tempFile = File.createTempFile("my_temp", "png", 
                      Environment.getExternalStorageDirectory());

并在 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)

问题2 :为什么这行不通,而恕我直言应该行?


问题答案:

我终于弄清楚正在发生什么…

问题1:实际上,创建的文件是供系统应用程序用来从用户的库中检索和裁剪图像的。因此,我的应用程序不必拥有WRITE_EXTERNAL_STORAGE权限,因为该文件是由系统本身编写的。

问题2:我不确定。我猜想Android不允许在我尝试的地方创建一个临时文件(因为它不合适)



 类似资料:
  • 为了让这个布局正常工作,我已经挣扎了好几个小时。 这是我的代码: 每个片段都是一个简单的RelativeLayout(都有相同的视图): 现在我想让它像这样工作: > 1) 无嵌套layout_weight 2)完全没有嵌套(例如嵌套2个第一个片段等) 3)在视图呈现后,不使用代码以编程方式完成。 在我看来,最简洁、可读性最强的方法是将片段1和片段2的方向设置为水平,将片段3设置为垂直,但它不起作

  • null 另外,如果使用,是否需要导入文件,或者不导入文件,常量将全局可用? 我可以从逻辑上得出一个结论,即是定义自定义错误域之类的东西时的最佳选择(我真的对吗?)。但其他人呢?

  • 问题内容: 我有一个不完整的csv文件,需要准确更新,因此有这样的csv文件: 自然地,文件要复杂得多,但是以这种格式,这是我要在7到8(或任何范围)之间插入或n个单词的内容。我怎样才能做到这一点? 伪代码,代码或示例都很好,我不知道如何开始。 更新: 也许我应该将其转换为数组或某种数据结构。然后,在特定位置插入新项目,将其余内容右移,并在每次插入时执行该操作。 我不知道是否正确的方法或如何开始对

  • 问题内容: 我正在尝试首次使用Kotlin构建android应用程序。 我想在OnCreate方法外的某些按钮上声明,并且只能在带有findViewById的此函数内对其进行初始化。 我可以像Java中那样用简单干净的代码声明吗? 因为当将其转换为Kotlin时,它看起来像: 然后在初始化OnClick函数时需要添加!标志: 什么是正确和最清洁的方法? 问题答案: 这是一个很好的用例。标记属性可以

  • 问题内容: 我想在数据库中存储大量声音文件,但是我不知道这是一个好习惯。我想知道这样做的利弊。 我还考虑了与这些文件建立“链接”的可能性,但这也许会带来比解决方案更多的问题。对此方向的任何经验都将受到欢迎:) 注意:数据库将是MySQL。 问题答案: 我所知道的每个存储大量大文件的系统都将它们存储在数据库的外部。您将文件的所有可查询数据(标题,艺术家,长度等)以及文件的部分路径存储在数据库中。当需