假设我有以下简单代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File sdCard = Environment.getExternalStorageDirectory();
String sdCardPath = sdCard.getAbsolutePath();
String parentPath = sdCardPath + File.separator + "parent";
String childPath = parentPath + File.separator + "child";
File parent = new File(parentPath);
File child = new File(childPath);
if (parent.exists()) {
Log.d("LOG", "Parent folder exists");
} else {
Log.d("LOG", "Parent folder doesn't exist");
}
if (child.exists()) {
Log.d("LOG", "Child folder exists");
} else {
Log.d("LOG", "Child folder doesn't exist");
}
}
}
另一方面,我在parent
和child
创建了2个文件夹<sdcard_root>/parent
和<sdcard_root>/parent/child
,以便进行检查。
当清单文件中的READ_EXTERNAL_STORAGE权限不时,结果为:父文件夹存在,子文件夹不存在。当我在清单文件中添加该权限时,结果就像我们预期的那样,两个文件夹都存在。
让我感到困惑的是,即使不使用READ_EXTERNAL_STORAGE权限,我们仍然可以检测到位于sdcard根目录的parent
文件夹是否存在,但是我们无法执行此操作child
文件夹。为什么?
IMO,当不使用读取权限时,检查结果应该是:父文件夹和子文件夹都不存在。为什么位于外部存储目录根目录的文件/文件夹被区别对待?在我看来,这似乎是一个例外。最后,在Android中使用权限时我们应该知道任何类似的例外吗?
感谢。