关于安卓调用文件浏览器(一)打开并复制

背景

最近在做一个硬件产品,安卓应用开发。PM抽风,要求从app打开文件浏览器,跳转到指定目录,然后可以实现文件复制粘贴操作。

思考

从应用开发的角度看,从app打开系统文件浏览器并且选择文件,这是很常见的事情。但是如果打开了文件浏览器,却不选择文件,而是要对文件进行长按复制黏贴,可以是不合理也不常规的,武断一点说,这个需求就压根没有进行过技术调研,技术评审。但是接都接下来了,干就完了。

开发环境

win10,as4+,jdk8+,硬件应用系统android9

过程

(1)通过adb,把系统的文件浏览器进行打包,然后通过复制apk到本地,进行源码查看。

这里涉及到的adb指令就不说了,主要讲一下,就是通过jadx,查看文件浏览器的源码。

这里有三个注意的点:

(1-1)这个文件浏览器,就是安卓官方的浏览器,看包名:ccom.android.documentsui,这个就是安卓标准的文件浏览器包名。这里再看PickActivity就是我们应用常规调用文件浏览器选择文件时打开的页面,而FilesActivity就是文件浏览器的入口页。

上面的说法,是有证据支持的,请看AndroidManifest.xml文件:

这些就是这两个activity的相关定义,足够知道这些activity都到是干什么的了。继续,看这个类:ActionHandler

这里就是处理两个activity的方法的一个类,封装后统一处理。

好,上面对类的定义,有一个大概的了解了,接下来,就进行开发。

(2)跳转页面

常规的调用,打开的文件选择页面后,是无法进行复制黏贴的,所以这里跳转的类,肯定是FilesActivity。且我们已经知道包名了,因此,可以通过包名,类名,就可以打开一个app了。核心代码如下:

复制代码
Intent intent = new Intent();
intent.setClassName("com.android.documentsui", "com.android.documentsui.files.FilesActivity");
Uri uri = Uri.parse("content://com.android.externalstorage.documents/document/primary:" + "PhdBackUp");
intent.setAction("android.intent.action.VIEW");
intent.setData( uri);
startActivity(intent);

这里的包名:com.android.documentsui

类名:com.android.documentsui.files.FilesActivity

uri参数:content://com.android.externalstorage.documents/document/primary:加对应的一级目录。

这里的写法,通过测试,某些机型是可以的。但是去到安卓12以上,或者显式声明了Activity的export是false,就不能通过外部调用打开了。

本以为问题到此解决,实际测试的时候,发现路径还得需要对特定的系统进行适配。例如这个产品是魔改过的room,那么它的uri是不一样的,因此需要调试,但是原理上,就大致一致的。

上述内容,仅仅是对特定系统的一种需求实现思路总结,目前该方案实测并不是兼容很好,所以不建议普及使用。

that's all------------------------------------------------------------------------------------------------------------

相关推荐
冬奇Lab1 天前
MediaPlayer 播放器架构:NuPlayer 的 Source/Decoder/Renderer 三驾马车
android·音视频开发·源码阅读
炸炸鱼.1 天前
Python 操作 MySQL 数据库
android·数据库·python·adb
用户41659673693551 天前
nextlib 项目架构与深度技术指南 (Architecture & Technical Master Guide)
android
aq55356001 天前
Laravel10.x重磅升级,新特性一览
android·java·开发语言
Trouvaille ~1 天前
【MySQL篇】数据类型:存储数据的基础
android·数据库·mysql·adb·字符集·数据类型·基础入门
2401_885885042 天前
开发视频短信接口好开发吗?图文视频短信接口对接教程
android·音视频
千码君20162 天前
kotlin:Jetpack Compose 给APP添加声音(点击音效/背景音乐)
android·开发语言·kotlin·音效·jetpack compose
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.2 天前
MySQL半同步复制与GTID实战详解
android·mysql·adb
用户41659673693552 天前
深度解码:记一次视频时间戳(PTS)异常导致的播放故障排查
android
大白菜和MySQL2 天前
linux系统环境常用命令
android·linux·adb