牙叔教程 簡單易學(xué)
使用場景
你說個詞, 我畫個畫, 目前就是顯示一張圖片,后期可以自己改成畫畫的方式來呈現(xiàn)圖片
效果展示
效果.png
流程圖
你說我畫流程圖.png
autojs版本
8.7.7-0
get知識點
- 停止其他腳本
- 百度語音識別
- 百度通用物體和場景識別高級版
- 百度圖像主體識別
- 爬取百度圖片
- 編輯距離
- 錄音
- canvas畫圖片
- 按鈕觸摸事件監(jiān)聽
- 申請錄音權(quán)限, 以及獲取申請結(jié)果
- canvas畫圖片時, 圖片居中
- 圖片回收
- 檢查是否有錄音權(quán)限
- python爬蟲改為autojs
- java方式的post
- 音頻播放和停止
代碼講解
1. 導(dǎo)入類
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. 導(dǎo)入模塊, 主要是百度智能云的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">
牙叔教程 簡單易學(xué)
</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. 錄音權(quán)限及錄音按鈕的touch監(jiān)聽
let r = checkPermission();
if (!r) {
toastLog("請授予錄音權(quán)限");
ui.emitter.on("request_permission_result", function () {
log(arguments);
});
let permissionName = "RECORD_AUDIO";
requestPermission(permissionName);
} else {
log("有錄音權(quán)限");
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. 申請和檢查權(quán)限
function getImgPathList(dir) {
var arr = files.listDir(dir);
arr = arr.map((item) => {
return files.join(dir, item);
});
return arr;
}
12. 申請和檢查權(quán)限
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;
}
}
參考文章
聲明
部分內(nèi)容來自網(wǎng)絡(luò)
本教程僅用于學(xué)習(xí), 禁止用于其他用途
給我個面子小圖.jpg