有时候脚本需要读文件数据,手写路径比较麻烦,写死又不太灵活,可以通过如下方式实现自定义选择文件
- 首先在 ui 线程创建一个简单的按钮用于触发选择文件事件
ui.layout(
<frame>
<vertical h="auto" align="center">
<horizontal>
<button w="auto" id="selectFile" text="选择文件" />
<text w="*" id="path" text="请选择文件!" />
</horizontal>
<horizontal layout_width="match_parent">
<button id="start" gravity="center" layout_weight="1" text="开始运行" />
<button id="stop" layout_width="100" text="退出" />
</horizontal>
</vertical>
</frame>
);
- 创建选择文件按钮点击事件, 在这之前需要导入所需要的 Class,建议放置顶部,即
"ui";
下方
importClass(android.content.Intent)
importClass(android.graphics.BitmapFactory)
importClass(android.provider.MediaStore)
importClass(android.webkit.MimeTypeMap)
- 下面是选择文件按钮监听事件,我这里是通过
intent.setType("text/plain")
限制了文件类型为txt
,如果不限制类型将text/plain
设置为*
即可
ui.selectFile.click(() => {
let intent = new Intent()
intent.setType("text/plain")
intent.setAction(Intent.ACTION_GET_CONTENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
activity.startActivityForResult(intent, 1)
})
- 监听选择文件后事件
ui.emitter.on("activity_result", (requestCode, resultCode, data) => {
if (resultCode !== -1) {
toastLog("没有选择文件!")
return false
}
let uri = data.getData()
let path = uri.getPath()
if (!path.endsWith(".txt")) {
toastLog("该文件不可用或文件类型错误!")
return false
}
// 适配路径
let resultPath = replacePath(path)
if(!files.exists(resultPath)) {
toastLog(`当前路径未兼容,请联系开发人员处理!(${path})`)
return false
}
console.log(`已选择文件:${resultPath}`)
// 将路径展示到ui界面
ui.path.setText(resultPath)
})
- 我这里获取到的文件路径直接用过
files.exists()
无法识别到,所以做了一个适配处理,如下函数
function replacePath(path) {
let rules = [
{prefix: "/document/primary:", length: 18},
{prefix: "/external_files/", length: 16},
{prefix: "/sdcard/", length: 8}
]
// 获取外部存储器的根目录路径
// let rootDir = Environment.getExternalStorageDirectory().getAbsolutePath()
let resultPath = "/sdcard/"
// 直接拼接并判断是否存在
if(files.exists(resultPath + path)) {
return resultPath + path
}
// 否则按规则替换拼接
for (let i = 0; i < rules.length; i++) {
let rule = rules[i];
if(path.startsWith(rule.prefix)) {
resultPath += path.substring(rule.length)
break;
}
}
return resultPath;
}
原作者的 AutoJS Pro 目前对于无障碍这块没有什么可玩性了,推荐 AutoJS6 由 SuperMonster003 维护,基于原 AutoJS.v4.1 仓库版本,无任何限制!