当前位置: 首页 > 知识库问答 >
问题:

在Android API 29中访问外部存储

柴增
2023-03-14

我正试图实现一些清理工具。越来越多的制造商出于某种“安全原因”禁止根设备,禁止不请求解锁。

在API28之后,这段代码将出现错误:


ActivityCompat.requestPermissions(this, new String[]{
  Manifest.permission.READ_EXTERNAL_STORAGE,
  Manifest.permission.WRITE_EXTERNAL_STORAGE
}, 1); // Request permission or not, Will got same result

File rootFolder = Environment.getExternalStorageDirectory(); // That is working fine
rootFolder.listFiles(); // That will return null
android:requestLegacyExternalStorage="true"

但我相信将来会被杀的。

那么,有什么优雅的方法来管理SDCard吗?

共有1个答案

柳威
2023-03-14

在Android 10上environment.getExternalStorageDirectory()Environment.getExternalStoragePublicDirectory()将返回存储路径,但路径不可读或不可写。

>

  • 对于Android10,如果将Android:RequestLegacyExternalStorage=“true”添加到清单文件中的应用程序标记中,则可以继续使用Environment.getExternalStorageDirectory()和Environment.getExternalStoragePublicDirectory()提供的路径。在运行时,应用程序可以调用environment.isExternalStorageLegacy()来检查请求是否已经完成。

    另一种(未知)可能性(仅适用于Android10)是将 添加到清单文件中。用户必须转到应用程序的高级设置并启用从高级设置安装未知应用程序允许从此源。这样做的好处是用户可以切换访问权限。如果实现settings.action_application_details_settings的意图,用户可以更容易地更改设置。有趣的是Environment.isExternalStorageLegacy()也返回true。

    为Android 11编译这两个选项在Android 11设备上都不起作用。(但他们继续适用于Android10设备)。Environment.getExternalStorageDirectory()和Environment.getExternalStoragePublicDirectory()的路径同样可以在读模式下使用,通常也可以在写模式下使用。这是很好的,因为可以简单地列出目录的内容,如下载或图片或DCIM/Camera再次使用文件类。但是添加 来清单文件,并实现设置的意图。action_manage_app_all_files_access_permission将使应用程序能够对所有文件进行读/写访问,即使是在可移动的微型sd卡上。(最后,您可以删除谷歌禁止您使用自己的应用程序在自己的Android设备上读/写自己的micro sd卡的禁令)。environment.isExternalStorageManager()可用于检查权限是否打开/关闭。只要你不尝试上传你的应用到play商店,你就可以了。

  •  类似资料:
    • 我试图找到所有的mp3文件在存储,但我的应用程序崩溃,我使用logcat看看为什么和问题的权限访问外部存储,但我已经把权限在清单,我不知道为什么不断崩溃。第一个错误: 03-06 14:55:24.553:E/dex2OAT(2796):创建oat文件失败:/data/dalvik-cache/x86/data@app@felipe.cursoandroid.com.musicbox-2@spli

    • 我有一个Xperia Neo V没有任何内部存储--只有一个SD卡作为外部存储,而Galaxy S3有内部和外部存储。 使用此函数时只能访问内部存储(S3)上的文件,但Xperia Neo V没有问题。 如何访问内部和外部存储上的文件?

    • 外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。 当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。 使用 docker container ls 可以看到,本地主机的 49155 被映射到了容器的 5000 端口。此时访问本机的 49155 端口即可访问容器内 web 应

    • 问题内容: 我正在尝试使用Firebase设置CollectionView中的单元格数量。我试图创建一个局部变量,并将其设置为与Firebase变量相同的值,但是当我尝试在函数外部使用它时,它将无法正常工作。我也尝试在ViewWillAppear中设置它,但是没有用。 我设置导航栏标题以查看值。当它在闭包中设置时,我得到了正确的值,当我在闭包外部(在firebase函数之后)写了它时,它的值为0。

    • 前面几节讲到如何访问kubneretes集群,本文主要讲解访问kubenretes中的Pod和Serivce的几种方式,包括如下几种: hostNetwork hostPort NodePort LoadBalancer Ingress 说是暴露Pod其实跟暴露Service是一回事,因为Pod就是Service的backend。 hostNetwork: true 这是一种直接定义Pod网络的方

    • 问题内容: 我正在尝试使用docker-compose启动kafka服务,并且应该可以在docker内部和外部进行访问。因此,应该在内部和外部设置合适的广告客户: 问题是,当我尝试从群集外部进行连接时,节点名称不是127.0.0.1,而是内部主机名: 这不是KAFKA_ADVERTISED_LISTENERS和KAFKA_LISTENERS处理这种情况的目的吗?我尝试设置KAFKA_ADVERTI