【发布时间】: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/… 然后让我们知道更新。