<p>在Android 10上<code>Environment.getExternalStorageDirectory()</code>和<code>Environment.getExternalStoragePublicDirectory()</code>将返回存储路径,但路径不可读写</p>
<ol>
<li><p>对于Android 10,如果将<code>android:requestLegacyExternalStorage="true"</code>添加到清单文件中的应用程序标记,则可以继续使用Environment.getExternalStorageDirectory()和Environment.getExternalStoragePublicDirectory()提供的路径。在运行时,您的应用程序可以调用<code>Environment.isExternalStorageLegacy()</code>来检查请求是否已完成</p>
</li>
<li><p>另一种(未知)可能性(仅适用于Android 10)是将<code><uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /></code>添加到清单文件中。
用户必须转到应用程序的高级设置并从<code>Advanced settings Install unknown apps | Allow from this source</code>启用。
这样做的好处是用户可以切换访问权限。如果您实现了一个
<code>Settings.ACTION_APPLICATION_DETAILS_SETTINGS</code>他可以在那里更改设置。
有趣的是,Environment.isExternalStorageLegacy()也会返回true</p>
</li>
<li><p>为Android 11编译这两个选项在Android 11设备上都不起作用。(但它们仍然适用于Android 10设备)。Environment.getExternalStorageDirectory()和Environment.getExternalStoragePublicDirectory()的路径是<code>usable again in read mode and very often in write mode too</code>。这很好,因为您可以使用File类简单地再次列出目录的内容,如下载、图片或DCIM/Camera。
但是将<code><uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /></code>添加到清单文件并实现
<code>Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION</code>将为应用程序提供对所有文件的读/写访问权限,即使是在可移动micro sd卡上。
(最后,你可以取消谷歌禁止使用自己的应用程序在自己的Android设备上读/写自己的micro sd卡的禁令)。
<code>Environment.isExternalStorageManager()</code>可用于检查权限是否打开/关闭。
只要你不尝试将你的应用程序上传到play store,你就可以了</p>
</li>
</ol>