开发者

如何评价在Android11中,/Android/data文件夹无法读写??

忆清静丫 7小时前

开发者_开发问答 非常后悔更新了11,这可能是我见过最恶心的设计了,完全意义不明。能轻松管理所有文件一直是我觉得安卓比ios好的一点,我经常会把应用缓存的一些视屏图片储存起来,真的就好的不学学坏的。不过目前还没有像ios那样封锁严密,连到电脑上还是可以管理的,以后真的不能无脑更新系统了,后悔。----------------------------------话说现在ES浏览器给了权限就可以继续浏览data了,也算是有了个解决办法了


陌清茗18185350591女 7小时前

https://developer.android.com/about/versions/11/privacy/storage?hl=zh-cn#file-access对数据安全有一定帮助,但是对于某些不遵守安卓规范的应用来说,恐怕是灾难。举个例子,QQ下载的文件现在在Android/data/com.tencent.mobileqq/Tencent/QQfile_recv下这意味着当我升级安卓11,我无法在正常的权限下获得我通过QQ下载的东西,这会带来极大的不方便。当然这只是我的推测,我自己并未使开发者_Go百科用Android11,如有错误请指出。<hr/>目前我已经用上Android11,目前通过自带文件浏览器可以访问Android/data目录,root以后通过mt管理器可以读写该路径。


z490656112 7小时前

是伞兵机制.喵的,手机里任何一个软件,注意,是任何软件你授权了,都可以开发者_Go百科挎着文件夹读写.但是,我这个用户,即使我授权了,也没法愉快的直接读写.反正意思就是,授权的第三方软件比系统的管理器更加值得信任而且是无条件的那种.我可以轻松的把文件发送到百度云,任何云,就是没法拷贝到本地.这个设计真的是伞兵.


路人丁的爱 6小时前

开发者_开发技巧 不知道是手机厂商会妥协,一通花里胡哨的操作给各个软件公司大爹开放权限,还是软件公司妥协,从此不再往data里乱拉屎。那天我要解压一个QQ群里文件,之后包括官方文件管理器之内的应用程序都显示无权限。在网上搜索一下后,我在三星的社区搜到一个解决办法:升级安卓11(ONE UI3.0)之后无法访问DATA文件夹解决办法 - 盖乐世社区 - 三星手机官方粉丝论坛神奇的是我安装这个应用没有给我要权限,有没有大佬解答一下这是咋回事。


六合霸主 6小时前

开发者访问安卓11 /android/data的方法为需要的开发者提供一种访问安卓11的 /adnroid/data文件夹的方法清浊清浊最新版已经适配安卓11 并且可以免 ROOT 访问 android/data 针对安卓11 希望分享出这种方法 也希望有些人不要再反编译我的代码并抄袭1.申请android/data的访问权限使用intent 跳转系统文件管理器到 android/data 并同意你的应用访问这个文件夹这里是代码 Uri uri1 = Uri.parse("content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata"); Intent intent1 = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); intent1.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION); intent1.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uri1); startActivityForResult(intent1, 11);这里的url 是我自己在旧安卓使用文件管理器选择android/data返回的uri 同理 传递这个uri 给文件管理器 自然也会跳转到这文件夹 如果不传递uri 系统文件管理器仍然无法显示 android/data修改:这里的uri 在后续我发现在部分安卓11 无法正常跳转了 以下是解决方法使用DocumentFile.fromTreeUri这个方法 获得DocumentFile对象 然后再获取他的uri 传进去就行了 这样就能正常跳转uri 了如果授权完成 会是这样后续的检测是否授权android/data 就自行查看谷歌文档吧2.使用uri 访问 android/data 的文件如果你现在有一个文件的path 那么这样做可以转为可以访问的uriString[] paths = path.replaceAll("/storage/emulated/0/Android/data", "").split("/"); StringBuilder stringBuilder = new StringBuilder("content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata/document/primary%3AAndroid%2Fdata"); for (String p : paths) { if (p.length() == 0) continue; stringBuilder.append("%2F").append(p); } return Uri.parse(stringBuilder.toString());这个uri 是android/data里的文件的uri 那么现在你可以使用DocumenFile 访问这个文件具体的DocumentFile 用法可以谷歌下 3.使用ContentResolver 访问文件如果你的对象是一个文件夹 并且你想要访问这文件夹的文件 那么可以使用ContentResolver.query这个方法DocumentsContract.buildChildDocumentsUriUsingTree(dirUri, DocumentsContract.getDocumentId(dirUri));使用这个把uri 转为 resolver 可处理的uri 然后使用 query查询resolver.query(childrenUri, new String[]{DocumentsContract.Document.COLUMN_DOCUMENT_ID}, null, null, null);主要是为了获取DocumentId 用于获取子文件的uri这个方法是SQL 的方法 当然就可以使开发者_JAVA技巧用SQL 的语句 可以自行谷歌这个文档这里是获取子文件的uri while (cursor.moveToNext()) { String documentId = cursor.getString(0); Uri uri = DocumentsContract.buildDocumentUriUsingTree(dirUri, documentId);}如果可以的话我建议 在此之前判断 resolver.query 返回的 cursor 对象是否是null 这样子我们就再次获取了子文件的uri 了那么DocumentFile 就能再次派上了用场 DocumentFile documentFile1=DocumentFile.fromSingleUri(context,uri);DocumentFile 为我们提供了判断是否是 文件夹 文件的方法如果是文件夹我们可以再次执行这样得循环 如果是文件 我们可以获取大小等由于清浊并不需要读取文件内容和修改内容 所以这两个怎么做 我并没有做了 当然谷歌的文档说了可以使用I/O 读取 就跟普通的File 操作没区别了到这 4.末这种方法并不是新方法 只是在安卓11 可以用罢了 早在之前读取联系人等 就是用的这种方法 安卓5.0开始就有了这种读取方法 不过这种方法目前就我看来有一点问题 速度缓慢 容易出现问题 具体问题我已经遇到 在某种情况下会抛出各种exception 给你 当然就需要你catch 一下了 后续的问题再说吧 或许也有其他方法读取 代码并不是原创都是来自谷歌提供的文档 具体的应用可以下载下清浊试试嗷 起飞


0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜