【问题标题】:Android File System - Can't write on file even though I have permissionsAndroid 文件系统 - 即使我有权限也无法写入文件
【发布时间】:2021-02-28 14:22:07
【问题描述】:

我正在尝试制作一个以编程方式删除文件的程序。我的程序有读写权限。

代码可以简化为:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    File asd = new File("/storage/emulated/0/Pictures/IMG_20210228_165109.jpg ");
    System.out.println(asd.exists());//true
    System.out.println(asd.setWritable(true));//true
    System.out.println(asd.canWrite());//false
    System.out.println(asd.delete());//false
}

是的,我对示例进行了硬编码,但您明白了,真正的程序不是硬编码的。示例程序和实际程序都无法像这样删除文件。

我在 android studio 的 Android Emulator 和我的手机上进行了尝试。两次结果都是一样的——exists() 和 setWritable() 为 true,但 canWrite() 和 delete() 为 false。

为什么会这样? (我手机的安卓版本是10,模拟器是11。)

【问题讨论】:

  • 自 Android 4.4 以来,我们没有对 removable storage 上任意位置的写入权限。
  • @CommonsWare android 文件系统太混乱了。 /storage/emulated/0/Pictures/IMG_20210228_165109.jpg 格式怎么样?这是可以访问的吗?谢谢。
  • “这可以访问吗?” -- 老实说,我不记得你是否可以在 Android 11+ 上从那里删除文件。
  • 您是如何通过清单或运行时获得文件权限的?看看这个线程。 stackoverflow.com/questions/55908308/… 然后让我们知道更新。

标签: java android file


【解决方案1】:

三件事。

在清单中请求读写权限。

添加代码让用户在运行时确认这些权限。

对于 Android 10 设备,请求清单中的旧版外部存储。

在 Android 11 设备上,应用只能删除自己的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2012-05-04
    • 2013-05-04
    • 1970-01-01
    • 2021-01-28
    • 2014-08-28
    相关资源
    最近更新 更多