出于某种原因,我真的很挣扎,希望有人能帮我指明正确的方向。
我的目标是Android11/API30,这似乎是所有问题的根源。针对较低的目标可能对我有用——但谷歌似乎最终会迫使我走上这条路,所以我还是想办法解决这个问题。
我的应用程序通常按照标准写入文件
getExternalFilesDir(null)
这给了我一个设备上的路径
/storage/emulated/0/Android/data/com.domain.testapp/files
我还尝试了其他类型,比如:
getExternalFilesDir(Environment.DIRECTORY_PICTURES)
结果在
/storage/emulated/0/Android/data/com.domain.testapp/files/Documents
我的应用程序没有任何问题实际上写文件到这个位置。在Android11中,我必须用本地文件浏览器跳过一些障碍才能看到这些文件——但它们确实存在于设备上。
我现在正试图给用户一些查看文件和共享文件的能力,这就是我被难倒的地方!
下面的代码导致找不到任何文件
File filePath = this.getExternalFilesDir(null);
String filePathString = filePath.toString();
ArrayList<String> myData = new ArrayList<>();
File fileDir = new File(filePathString);
String[] files = fileDir.list();
if(files.length == 0){
Log.w(APPID, "NO FILES IN FOLDER");
}
是的,我知道文件和文件。toString()是不需要的,但我每一步都把它们注销,因为我觉得自己疯了。
我知道一个事实,有十几个文件夹,这是指在这个应用程序。这个应用程序创建的文件。它不应该能看到文件夹里的文件吗???
Manifest拥有以下权限——我认为它不需要所有这些权限:
<uses-permission android:name = "android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>
没有权限显示为拒绝应用程序
我想过使用外部存储——但在Android11中似乎更难?或者这真的是一条更容易走的路?
我确实试着玩这个,但它似乎过时了,很快就会消失?
File downloadFilePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
就是我设备上的这个文件夹
/storage/emulated/0/Download
我可以用任何文件浏览器看到里面的文件。
关于如何访问此应用程序创建的文件的任何想法?
我可能错过了一些非常明显的东西。
欢迎任何建议!!
添加下面的行在你的Android清单文件中的应用程序标记。
android:requestLegacyExternalStorage="true"
Google Play Store要求您使用作用域存储,而不是共享存储,因此您应该避免使用“requestLegacyStorage”。
这意味着如果用户不直接选择sd卡上的文件,则无法访问这些文件。要从外部存储中选择文件,您需要用户交互(:
Android还有另一个解决方案
如果您的问题与外部存储中的用户交互文件有关,则可以使用文件提供程序(例如,在拍照时)启用对文件uri的访问。
祝你有愉快的一天和愉快的编码(:
我想我有答案了?
我读得越多——Android10似乎走的是一条路,然后Android11回来跟踪了一下,并重新启用了一些直接的文件路径访问。
希望我在这件事上是对的,以后不必再回来重新做事了
所以答案是在清单中使用requestLegacyExternalStorage——尽管它有各种各样的警告
然后我用这个在文档中创建了一个文件夹
File filePath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)+File.separator+"MyAppFolder");
filePath.mkdirs();
现在我可以写信给它并从中阅读。
不管怎样,这似乎对我在Android9、10和11上都有效。因此,希望未来的趋势继续下去。
通过使用android 11(SDK API 30)设备下面的一些方法 但在Android11中运行良好。无法使用如下所示的方法使其im 函数调用 uri是我从拾取器的响应中获得的视频路径。 copyFile的函数调用 错误:new ;path:/storage/emulated/0/download/stop/mp4_20210128225711.mp4 system.err:java.io.f
日安! 我是Docker新手,真的需要帮助。 系统:Windows 10,Docker Desktop 应用程序:Java Spring-Boot应用程序,按照一定的逻辑在系统的不同文件夹中传输文件。包装在Docker容器中 问题:Java Spring-Boot应用程序在Windows 10中看不到文件夹(例如“我的文档”、“C:\Program Files”等等。应用程序应该从“C:\User
问题内容: 这个问题可能被问过很多次,但是我没有找到直接的答案。 实际上,我正在使用WebSphere来运行Java Web应用程序,我想将上传的文件/资源保存/存储到服务器目录之外的文件夹中,D:/resources/但是我担心的是,我们是否有可能这样做?因为这可能是某种安全漏洞。 如果可能的话,那么如何在Java Web应用程序中做到这一点。 问题答案: 下面是在struts 1.x中上传
问题内容: 有没有办法从iCloud Drive中选择文件? 问题答案: 您可以通过以下方式显示控制器: 在您的委托中实现方法: 请注意,您无需设置要使用的iCloud权利。Apple 在此处提供了示例代码来演示如何使用此控制器
我正在从主类访问资源文件夹中的文件 我收到了这个错误: 我甚至打开了jar文件,remoteUnitsIdsInOldServer.txt文件就在那里,在类内部
如何从watchOS扩展文件夹访问iOS文件夹中的数据类。如果我想通过调用我的DataService来正常访问类,则会出现以下错误: 我要访问的文件: