该问题是由于Android 11中引入了新的存储访问权限模型所导致的。
当执行isExternalStorageManager()方法返回true时,应用程序仍然无法访问外部存储中的其他应用程序私有文件。这是由于该方法只表明应用程序已被授予'外部存储管理器”权限,而不是'所有文件访问权限”。
要访问其他应用程序私有文件,应使用以下代码示例中的方法:
首先,确保应用程序在AndroidManifest.xml中已声明以下权限:
然后使用以下代码片段访问其他应用程序私有文件:
String packageName = "
try { Context otherAppCtx = createPackageContext(packageName, 0); FileInputStream fileStream = otherAppCtx.openFileInput(filePath); StringBuffer stringBuffer = new StringBuffer(); int ch; while ((ch = fileStream.read()) != -1) { stringBuffer.append((char) ch); } fileContent = stringBuffer.toString(); fileStream.close(); } catch (Exception e) { e.printStackTrace(); }
使用上述方法可以访问其他应用程序的私有文件,并在isExternalStorageManager()返回true的情况下正常执行。