autojs之选择文件

2024-01-14 13:48
文章标签 选择 autojs

本文主要是介绍autojs之选择文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用场景

 

调用手机自带的文件管理  选择文件

 

效果展示

 

选择文件.png

autojs版本号

 

autojs版本号.png

功能

 

  1. 可任意选择图片, 音频, 视频
  2. 可以更换imgView的图片
  3. 可以播放音频
  4. 可以播放视频

 

你将学到以下知识

 

  1. 调用文件管理选择文件
  2. 接收文件管理返回的数据
  3. 增加或者删除子view
  4. 使用文件头判断文件类型
  5. uri转文件路径

 

完整代码

 

"ui";importClass(android.content.Intent);
importClass(android.graphics.BitmapFactory);
importClass(android.provider.MediaStore);
importClass(android.webkit.MimeTypeMap);ui.layout(<vertical><button id="btnImg" text="选择图片" /><button id="btnAudio" text="选择音频" /><button id="btnVideo" text="选择视频" /><button id="btnImgAndVideo" text="选择图片和视频" /><button id="btnAnyFile" text="选择任意文件" /><text textSize="30sp" w="*" gravity="center" textStyle="bold">AutoJsPro教程 牙叔</text><vertical id="parentView"></vertical></vertical>
);let imgRequestCode = 1;
let audioRequestCode = 2;
let videoRequestCode = 3;
let imgAndVideoRequestCode = 4;
let imgAnyFileRequestCode = 5;ui.btnImg.on("click", () => {let fileType = "image/*";let requestCode = imgRequestCode;var intent = new Intent();intent.setType(fileType);intent.setAction(Intent.ACTION_GET_CONTENT);activity.startActivityForResult(intent, requestCode);
});
ui.btnAudio.on("click", () => {let requestCode = audioRequestCode;let i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);activity.startActivityForResult(i, requestCode);
});
ui.btnVideo.on("click", () => {let fileType = "video/*";let requestCode = videoRequestCode;var intent = new Intent();intent.setType(fileType);intent.setAction(Intent.ACTION_GET_CONTENT);activity.startActivityForResult(intent, requestCode);
});
ui.btnImgAndVideo.on("click", () => {let fileType = "video/* image/*";let requestCode = imgAndVideoRequestCode;intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);intent.setType(fileType);activity.startActivityForResult(intent, requestCode);
});
ui.btnAnyFile.on("click", () => {let fileType = "*/*";let requestCode = imgAnyFileRequestCode;var intent = new Intent();intent.setType(fileType);intent.setAction(Intent.ACTION_GET_CONTENT);activity.startActivityForResult(intent, requestCode);
});activity.getEventEmitter().on("activity_result", (requestCode, resultCode, data) => {if (resultCode != -1) {toastLog("没有选择文件!");return false;} else {var uri = data.getData();log("uri: %s", uri.toString());let filepath = URIUtils_uriToFile(uri);log(filepath);var cr = context.getContentResolver();switch (requestCode) {case imgRequestCode:log("图片");var bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));log("bitmap: %s", bitmap);ui.parentView.removeAllViews();var childView = ui.inflate(<img></img>, ui.parentView);ui.parentView.addView(childView);childView.setImageBitmap(bitmap);break;case audioRequestCode:log("音频");media.playMusic(filepath);toastLog("播放 10 秒钟");setTimeout(function () {media.stopMusic();toastLog("停止播放");}, 10000);break;case videoRequestCode:log("视频");ui.parentView.removeAllViews();var childView = ui.inflate(<VideoView></VideoView>, ui.parentView);ui.parentView.addView(childView);childView.setVideoPath(filepath);childView.start();break;case imgAndVideoRequestCode:log("图片或视频");ui.parentView.removeAllViews();let fileType = getFileType(filepath);if (fileType === "mp4") {log("是视频");var childView = ui.inflate(<VideoView></VideoView>, ui.parentView);ui.parentView.addView(childView);childView.setVideoPath(filepath);childView.start();} else {log("是图片");var bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));var childView = ui.inflate(<img></img>, ui.parentView);ui.parentView.addView(childView);childView.setImageBitmap(bitmap);}break;case imgAnyFileRequestCode:log("任意文件");break;default:log("其他");break;}}
});// ==============自定义函数================================function getFileType(filePath) {// 查看文件头请使用软件: HexEditXPimportClass("java.util.HashMap");importClass(java.io.FileInputStream);importClass(java.lang.StringBuilder);let mFileTypes = new HashMap();mFileTypes.put("ffd8ffe000104a464946", "jpg"); //JPEG (jpg)mFileTypes.put("89504e470d0a1a0a0000", "png"); //PNG (png)mFileTypes.put("47494638396126026f01", "gif"); //GIF (gif)mFileTypes.put("49492a00227105008037", "tif"); //TIFF (tif)mFileTypes.put("424d228c010000000000", "bmp"); //16色位图(bmp)mFileTypes.put("424d8240090000000000", "bmp"); //24位位图(bmp)mFileTypes.put("424d8e1b030000000000", "bmp"); //256色位图(bmp)mFileTypes.put("41433130313500000000", "dwg"); //CAD (dwg)mFileTypes.put("3c21444f435459504520", "html"); //HTML (html)mFileTypes.put("3c21646f637479706520", "htm"); //HTM (htm)mFileTypes.put("48544d4c207b0d0a0942", "css"); //cssmFileTypes.put("696b2e71623d696b2e71", "js"); //jsmFileTypes.put("7b5c727466315c616e73", "rtf"); //Rich Text Format (rtf)mFileTypes.put("38425053000100000000", "psd"); //Photoshop (psd)mFileTypes.put("46726f6d3a203d3f6762", "eml"); //Email [Outlook Express 6] (eml)mFileTypes.put("d0cf11e0a1b11ae10000", "doc"); //MS Excel 注意:word、msi 和 excel的文件头一样mFileTypes.put("d0cf11e0a1b11ae10000", "vsd"); //Visio 绘图mFileTypes.put("5374616E64617264204A", "mdb"); //MS Access (mdb)mFileTypes.put("252150532D41646F6265", "ps");mFileTypes.put("255044462d312e350d0a", "pdf"); //Adobe Acrobat (pdf)mFileTypes.put("2e524d46000000120001", "rmvb"); //rmvb/rm相同mFileTypes.put("464c5601050000000900", "flv"); //flv与f4v相同mFileTypes.put("00000020667479706d70", "mp4");mFileTypes.put("49443303000000002176", "mp3");mFileTypes.put("000001ba210001000180", "mpg"); //mFileTypes.put("3026b2758e66cf11a6d9", "wmv"); //wmv与asf相同mFileTypes.put("52494646e27807005741", "wav"); //Wave (wav)mFileTypes.put("52494646d07d60074156", "avi");mFileTypes.put("4d546864000000060001", "mid"); //MIDI (mid)mFileTypes.put("504b0304140000000800", "zip");mFileTypes.put("526172211a0700cf9073", "rar");mFileTypes.put("235468697320636f6e66", "ini");mFileTypes.put("504b03040a0000000000", "jar");mFileTypes.put("4d5a9000030000000400", "exe"); //可执行文件mFileTypes.put("3c25402070616765206c", "jsp"); //jsp文件mFileTypes.put("4d616e69666573742d56", "mf"); //MF文件mFileTypes.put("3c3f786d6c2076657273", "xml"); //xml文件mFileTypes.put("494e5345525420494e54", "sql"); //xml文件mFileTypes.put("7061636b616765207765", "java"); //java文件mFileTypes.put("406563686f206f66660d", "bat"); //bat文件mFileTypes.put("1f8b0800000000000000", "gz"); //gz文件mFileTypes.put("6c6f67346a2e726f6f74", "properties"); //bat文件mFileTypes.put("cafebabe0000002e0041", "class"); //bat文件mFileTypes.put("49545346030000006000", "chm"); //bat文件mFileTypes.put("04000000010000001300", "mxp"); //bat文件mFileTypes.put("504b0304140006000800", "docx"); //docx文件mFileTypes.put("d0cf11e0a1b11ae10000", "wps"); //WPS文字wps、表格et、演示dps都是一样的mFileTypes.put("6431303a637265617465", "torrent");mFileTypes.put("6D6F6F76", "mov"); //Quicktime (mov)mFileTypes.put("FF575043", "wpd"); //WordPerfect (wpd)mFileTypes.put("CFAD12FEC5FD746F", "dbx"); //Outlook Express (dbx)mFileTypes.put("2142444E", "pst"); //Outlook (pst)mFileTypes.put("AC9EBD8F", "qdf"); //Quicken (qdf)mFileTypes.put("E3828596", "pwl"); //Windows Password (pwl)mFileTypes.put("2E7261FD", "ram"); //Real Audio (ram)mFileTypes.put("null", null); //nullfunction getFileType(filePath) {filePath = java.lang.String(filePath);let keySearch = getFileHeader(filePath);fileType = mFileTypes.get(keySearch);if (!fileType) {let keyList = mFileTypes.keySet().iterator();let keySearchChild = keySearch.substring(10, keySearch.length);while (keyList.hasNext()) {let key = keyList.next();key = java.lang.String(key);if (key.contains(keySearchChild)) {let fileSuffix = mFileTypes.get(key);return fileSuffix;}}}return fileType;}//获取文件头信息function getFileHeader(filePath) {let is = null;let value = null;try {let is = new FileInputStream(filePath);let b = util.java.array("byte", 10);is.read(b, 0, b.length);value = bytesToHexString(b);} catch (e) {log(e);} finally {if (null != is) {try {is.close();} catch (e) {log(e);}}}return value;}// arr =["0","0","0","18","66","74","79","70","6d","70"]function bytesToHexString(src) {let arr = [];let stringBuilder = new StringBuilder();for (let i = 0; i < src.length; i++) {let v = src[i] & 0xff;let hv = java.lang.Integer.toHexString(v);// hv = java.lang.String()if (hv.length < 2) {stringBuilder.append("0");}stringBuilder.append(hv);arr.push(hv);}return stringBuilder.toString();}let fileType = getFileType(filePath);return fileType;
}function URIUtils_uriToFile(uri) {//Source : https://www.cnblogs.com/panhouye/archive/2017/04/23/6751710.htmlvar r = null,cursor,column_index,selection = null,selectionArgs = null,isKitKat = android.os.Build.VERSION.SDK_INT >= 19,docs;if (uri.getScheme().equalsIgnoreCase("content")) {if (isKitKat && android.provider.DocumentsContract.isDocumentUri(activity, uri)) {if (String(uri.getAuthority()) == "com.android.externalstorage.documents") {docs = String(android.provider.DocumentsContract.getDocumentId(uri)).split(":");if (docs[0] == "primary") {return android.os.Environment.getExternalStorageDirectory() + "/" + docs[1];}} else if (String(uri.getAuthority()) == "com.android.providers.downloads.documents") {uri = android.content.ContentUris.withAppendedId(android.net.Uri.parse("content://downloads/public_downloads"),parseInt(android.provider.DocumentsContract.getDocumentId(uri)));} else if (String(uri.getAuthority()) == "com.android.providers.media.documents") {docs = String(android.provider.DocumentsContract.getDocumentId(uri)).split(":");if (docs[0] == "image") {uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;} else if (docs[0] == "video") {uri = android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI;} else if (docs[0] == "audio") {uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;}selection = "_id=?";selectionArgs = [docs[1]];}}try {cursor = activity.getContentResolver().query(uri, ["_data"], selection, selectionArgs, null);if (cursor && cursor.moveToFirst()) {r = String(cursor.getString(cursor.getColumnIndexOrThrow("_data")));}} catch (e) {log(e);}if (cursor) cursor.close();return r;} else if (uri.getScheme().equalsIgnoreCase("file")) {return String(uri.getPath());}return null;
}

微信公众号 AutoJsPro教程

 

image

 

QQ群

 

747748653

 

这篇关于autojs之选择文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/605360

相关文章

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

为什么现在很多人愿意选择做债务重组?债重组真的就这么好吗?

债务重组,起初作为面向优质企业客户的定制化大额融资策略,以其高效周期著称,一个月便显成效。然而,随着时代的车轮滚滚向前,它已悄然转变为负债累累、深陷网贷泥潭者的救赎之道。在此路径下,个人可先借助专业机构暂代月供,经一段时间养护征信之后,转向银行获取低成本贷款,用以替换高昂网贷,实现利息减负与成本优化的双重目标。 尽管债务重组的代价不菲,远超传统贷款成本,但其吸引力依旧强劲,背后逻辑深刻。其一

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

可选择的反思指令微调

论文:https://arxiv.org/pdf/2402.10110代码:GitHub - tianyi-lab/Reflection_Tuning: [ACL'24] Selective Reflection-Tuning: Student-Selected Data Recycling for LLM Instruction-Tuning机构:马里兰大学, Adobe Research领

4-4.Andorid Camera 之简化编码模板(获取摄像头 ID、选择最优预览尺寸)

一、Camera 简化思路 在 Camera 的开发中,其实我们通常只关注打开相机、图像预览和关闭相机,其他的步骤我们不应该花费太多的精力 为此,应该提供一个工具类,它有处理相机的一些基本工具方法,包括获取摄像头 ID、选择最优预览尺寸以及打印相机参数信息 二、Camera 工具类 CameraIdResult.java public class CameraIdResult {