'ui';
importClass(java.io.File);
let safUtil = require('./saf.js');
let tdir = null;
let path;
ui.layout(
<vertical>
<text id="path" text="文件名" textSize="16sp" textColor="#000000" marginLeft="8dp"
gravity="center" maxLines="2" ellipsize="end" />
<ScrollView id="list" >
</ScrollView>
</vertical>)
ui.emitter.on('resume', () => {
let data = safUtil.get_data_documentFile(activity);
tdir = data;
path = new File('/sdcard/Android/data');
ui.path.text(path.getPath());
createView_and_Bind(data.listFiles(), ui.list);
});
dialogs.alert('提示','从安卓11开始,谷歌限制了Android/data目录的访问权限,'+
'普通应用无法直接使用java.io访问该目录的文件,'+
'但是可以通过安卓提供的SAF框架读取文件,需要跳转页面授权').then(()=>{
safUtil.getPermission(activity);
})
let xml = (
<card w="*" margin="0 2" cardCornerRadius="2dp"
cardElevation="1dp" foreground="?selectableItemBackground">
<horizontal w="*">
<img id="icon" w="50dp" h="50dp" scaleType="fitXY" tint="#77ca28" />
<text id="name" text="文件名" h="*" textSize="16sp" textColor="#373737" marginLeft="8dp"
gravity="center" maxLines="2" ellipsize="end" />
</horizontal>
</card>
);
function createView_and_Bind(data_list, viewGroup) {
let i = 0;
viewGroup.removeAllViews();
let ver = ui.inflate(
<vertical padding="16">
</vertical>, viewGroup, true);
let sid = setInterval((item) => {
if (i >= data_list.length) {
return clearInterval(sid);
}
let item = data_list[i];
let icon = item.isDirectory() ? "ic_folder_black_48dp" :
"ic_insert_drive_file_black_48dp";
let view = ui.inflate(xml, ver, true);
if (item.isDirectory()) {
view.click(() => {
clickDir(item);
})
} else {
view.click(() => {
clickFile(item);
})
}
view.name.setText(item.getName());
view.icon.setSource(icon);
i++;
}, 0)
}
function clickDir(documentFile) {
tdir = documentFile;
path = new File(path, documentFile.getName());
ui.path.text(path.getPath());
createView_and_Bind(documentFile.listFiles(), ui.list)
}
function clickFile(documentFile) {
rawInput("拷贝 " + documentFile.getName() + '到:', "/sdcard/Download").then(path => {
if (!path) return;
let file = new File(path,documentFile.getName());
let downloadDialog = dialogs.build({
title: "拷贝中",
progress: {
max: -1,
horizontal: true
},
cancelable: true
}).show();
safUtil.saveDocumentFile(activity,documentFile,file.getPath(),(b)=>{
ui.run(()=>{
downloadDialog.dismiss();
toast('拷贝'+(b?'成功':'失败'));
})
})
});
}
var isCanFinish = false;
var isCanFinishTimeout;
ui.emitter.on("back_pressed", e => {
let paren = tdir.getParentFile();
if (paren != null) {
tdir = paren;
path = path.getParentFile();
ui.path.text(path.getPath());
createView_and_Bind(paren.listFiles(), ui.list);
return e.consumed = true;
}
if (!isCanFinish) {
isCanFinish = true;
toast("在按一次退出");
isCanFinishTimeout = setTimeout(() => {
isCanFinish = false;
}, 2000);
e.consumed = true;
} else {
clearTimeout(isCanFinishTimeout);
e.consumed = false;
};
});
autojs使用SAF框架访问文件-1.0.0.1.zip
需积分: 2 183 浏览量
2024-05-23
17:52:51
上传
评论
收藏 4KB ZIP 举报
h3009nie
- 粉丝: 0
- 资源: 12
最新资源
- 2022213854李沐窈程序.cpp
- pod-tomcat.yaml
- 数据库管理工具:dbeaver-ce-23.0.3-amd64.deb
- This module implements the Requests API.
- Delphi 12 控件之unidac-10.2.1-d29pro.exe
- keyword.other.package.java
- Apple//DTD PLIST 1.0//EN
- comment.block.documentation.rust
- there is no way to distinguish perfectly
- 数据库管理工具:dbeaver-ce-24.0.2-x86-64-setup.exe
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈