牙叔教程 简单易学
使用场景
你说个词, 我画个画, 目前就是显示一张图片,后期可以自己改成画画的方式来呈现图片
效果展示
流程图
autojs版本
8.7.7-0
get知识点
- 停止其他脚本
- 百度语音识别
- 百度通用物体和场景识别高级版
- 百度图像主体识别
- 爬取百度图片
- 编辑距离
- 录音
- canvas画图片
- 按钮触摸事件监听
- 申请录音权限, 以及获取申请结果
- canvas画图片时, 图片居中
- 图片回收
- 检查是否有录音权限
- python爬虫改为autojs
- java方式的post
- 音频播放和停止
代码讲解
1. 导入类
importClass(android.content.pm.PackageManager); importClass("androidx.core.app.ActivityCompat"); importClass(android.media.MediaRecorder);
2. 停止其他脚本
engines.all().map((ScriptEngine) => { if (engines.myEngine().toString() !== ScriptEngine.toString()) { ScriptEngine.forceStop(); } });
3. 导入模块, 主要是百度智能云的api, 包括 语音识别, 通用物体和场景识别, 图片主体识别
let getVoiceText = require("./百度短语音识别"); let 爬取百度图片 = require("./爬取百度图片"); let 编辑距离 = require("./编辑距离"); let 图像识别 = require("./图像识别/图像识别");
4. 初始化文件路径
const voiceFilepath = "/sdcard/1.amr"; files.createWithDirs(voiceFilepath); const soundFile = new java.io.File(voiceFilepath);
5. 布局, 主要是一个画板和一个录音按钮
ui.layout( <vertical gravity="center"> <text textSize="36sp" w="*" gravity="center" textStyle="bold"> 说啥画啥 </text> <text textSize="24sp" w="*" gravity="center" textStyle="bold"> 牙叔教程 简单易学 </text> <canvas id="board" w="250dp" h="250dp"></canvas> <button id="btn" margin="6" textSize="26sp" w="*" h="100dp"></button> <horizontal weightSum="2" bg="#888888"> <button id="play" layout_width="0dp" layout_weight="1" textSize="25sp"> 开始播放 </button> <button id="stop" layout_width="0dp" layout_weight="1" textSize="25sp"> 停止播放 </button> </horizontal> </vertical> );
6. 延迟获取画板宽高
setTimeout(() => { bw = ui.board.getWidth(); bh = ui.board.getHeight(); }, 100);
7. 画板的draw事件
ui.board.on("draw", function (canvas) { canvas.drawARGB(255, 127, 127, 127); let 最终选择的图片 = getBoardImg(); if (最终选择的图片) { canvas.drawBitmap(最终选择的图片, (bw - iw) / 2, (bh - ih) / 2, paint); } });
8. 音频播放和停止
ui.play.click(function () { media.playMusic(soundFile.getAbsolutePath()); }); ui.stop.click(function () { media.stopMusic(); });
9. 录音权限及录音按钮的touch监听
let r = checkPermission(); if (!r) { toastLog("请授予录音权限"); ui.emitter.on("request_permission_result", function () { log(arguments); }); let permissionName = "RECORD_AUDIO"; requestPermission(permissionName); } else { log("有录音权限"); view.setOnTouchListener(function (view, event) { switch (event.getAction()) { case event.ACTION_DOWN: log("ACTION_DOWN"); record(); return true; case event.ACTION_UP: log("ACTION_UP"); recognizeVoice(); return true; } return true; }); }
10. 退出时不要忘记释放资源
events.on("exit", function () { if (recorder) { recorder.stop(); recorder.release(); recorder = null; media.stopMusic(); } });
11. 申请和检查权限
function getImgPathList(dir) { var arr = files.listDir(dir); arr = arr.map((item) => { return files.join(dir, item); }); return arr; }
12. 申请和检查权限
function requestPermission(permissionName) { ActivityCompat.requestPermissions(activity, ["android.permission." + permissionName], 321); } function checkPermission() { let permissionName = "RECORD_AUDIO"; let pm = context .getPackageManager() .checkPermission("android.permission." + permissionName, context.getPackageName()); if (PackageManager.PERMISSION_GRANTED == pm) { return true; } else { return false; } }
参考文章
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途