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

相关文章

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

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

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

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