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

背景

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

相关推荐
Jouzzy1 小时前
【Android安全】Ubuntu 16.04安装GDB和GEF
android·ubuntu·gdb
极客先躯2 小时前
java和kotlin 可以同时运行吗
android·java·开发语言·kotlin·同时运行
Good_tea_h4 小时前
Android中的单例模式
android·单例模式
计算机源码社9 小时前
分享一个基于微信小程序的居家养老服务小程序 养老服务预约安卓app uniapp(源码、调试、LW、开题、PPT)
android·微信小程序·uni-app·毕业设计项目·毕业设计源码·计算机课程设计·计算机毕业设计开题
丶白泽10 小时前
重修设计模式-结构型-门面模式
android
晨春计11 小时前
【git】
android·linux·git
标标大人12 小时前
c语言中的局部跳转以及全局跳转
android·c语言·开发语言
竹林海中敲代码12 小时前
Qt安卓开发连接手机调试(红米K60为例)
android·qt·智能手机
木鬼与槐13 小时前
MySQL高阶1783-大满贯数量
android·数据库·mysql
iofomo13 小时前
【Abyss】Android 平台应用级系统调用拦截框架
android·开发工具·移动端