在 SDK 29(又名 Android_Q)中,Environment.getExternalStorageDirectory()不推荐使用该方法访问外部存储,不再返回可访问的文件。
getExtenalStoragePublicDirectory(字符串类型)
此方法在 API 级别 29 中已弃用。为了提高用户隐私,不推荐直接访问共享/外部存储设备。当应用以 Build.VERSION_CODES.Q 为目标时,此方法返回的路径不再可供应用直接访问。通过迁移到诸如 Context#getExternalFilesDir(String)、MediaStore 或 Intent#ACTION_OPEN_DOCUMENT 等替代方案,应用程序可以继续访问存储在共享/外部存储上的内容。
但是 using 会Context#getExternalFilesDir(String)返回 App-Data 文件夹中的一个文件夹。在您的应用程序卸载或数据清除时删除。
但是考虑一下像 WhatsApp 或 Facebook Messenger 这样的应用程序如何保存备份和下载,他们使用外部存储并创建自定义文件夹来存储他们的数据。
这些应用程序将如何迁移?有没有新的方法?
我的应用程序是一个笔记应用程序,它将所有笔记备份到一个文件夹中,以便在应用程序删除或数据清除后进行恢复。在 SDK 29 中,我不能再遵循这样的方法。
我正在关注 Paging 3 的 Codelab。
分页工作正常,但尝试添加页脚似乎不起作用。
LoadStateAdapter我的代码在使用方面与 Codelab 完全一样
class ListLoadStateAdapter(
private val retry: () -> Unit,
) : LoadStateAdapter<ListLoadStateAdapter.ListLoadStateViewHolder>() {
override fun onBindViewHolder(holder: ListLoadStateViewHolder, loadState: LoadState) {
holder.bind(loadState)
}
override fun onCreateViewHolder(
parent: ViewGroup,
loadState: LoadState,
) = ListLoadStateViewHolder.create(parent, retry)
class ListLoadStateViewHolder(
private val binding: ComponentPagedListFooterBinding,
retry: () -> Unit,
) : RecyclerView.ViewHolder(binding.root) {
init {
binding.buttonRetry.setOnClickListener { retry.invoke() }
}
fun bind(loadState: LoadState) {
if (loadState is LoadState.Error) {
binding.textViewPlaceholderError.text = loadState.error.localizedMessage
}
binding.progressBar.isVisible = loadState is …Run Code Online (Sandbox Code Playgroud) 我正在使用 Unity3D 构建 Android 游戏,但 Unity 似乎正在使用旧版本的 Gradle。例如,它使用 Gradle Wrapper 4.6,而不是最新的 5.0,或者至少是之前最新的 4.10.2。
我尝试用Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\libAndroid Studio 中的 gradle 版本替换 gradle lib 文件夹,Unity 开始说invalid gradle installation
PS:我在Unity上问过这个问题,但要么那个地方已经死了,要么没有太多支持