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

背景

最近在做一个硬件产品,安卓应用开发。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------------------------------------------------------------------------------------------------------------

相关推荐
Kapaseker1 小时前
你不看会后悔的2025年终总结
android·kotlin
alexhilton4 小时前
务实的模块化:连接模块(wiring modules)的妙用
android·kotlin·android jetpack
ji_shuke4 小时前
opencv-mobile 和 ncnn-android 环境配置
android·前端·javascript·人工智能·opencv
sunnyday04266 小时前
Spring Boot 项目中使用 Dynamic Datasource 实现多数据源管理
android·spring boot·后端
幽络源小助理8 小时前
下载安装AndroidStudio配置Gradle运行第一个kotlin程序
android·开发语言·kotlin
inBuilder低代码平台8 小时前
浅谈安卓Webview从初级到高级应用
android·java·webview
豌豆学姐8 小时前
Sora2 短剧视频创作中如何保持人物一致性?角色创建接口教程
android·java·aigc·php·音视频·uniapp
白熊小北极8 小时前
Android Jetpack Compose折叠屏感知与适配
android
HelloBan8 小时前
setHintTextColor不生效
android
洞窝技术10 小时前
从0到30+:智能家居配网协议融合的实战与思考
android