LuaBox积木编程开发手册-精编版

文章目录


转载声明

原文章内不具备全局搜索功能,对于编程人员很不友好,很难查找相关编程函数,特此转发到CSDN.
网站转载,特此声明,原文出处:点击→积木编程


欢迎您使用 Luabox 开发文档! 希望以下文档可以帮助您解决开发中遇到的函数问题。

一、LuaBox(积木编程)是什么?

积木编程是一款模拟手机触摸、按键操作的软件。通过制作脚本,可以让积木编程代替双手,自动执行一系列触摸、按键操作。积木编程简单、易用,不需要掌握任何编程知识就可以制作出功能强大的脚本;还可以使用编程知识,编写出功能更为复杂,交互更为灵活的脚本;只要能够在手机上完成的人为操作,积木编程都可以代替完成,不仅省力,而且高效。

1.使用注意事项

本说明仅供初等文化水平以上的、了解计算机编程基本原理的个人学习与参考,并不适用于零基础的编程入门者学习编程基本知识。严禁用于商业以及非法目的,严禁转载、抄袭、未经许可地引用。
为了便于解释和描述,本说明中采用了一些非专业的描述与形容方法(如:number),敬请理解。因编写校对仓促,如有错误欢迎指正。本文中的示例仅供函数参考,不能直接用于脚本中。

2.扩展资料

Lua 官方手册:英文http://www.lua.org/manual/5.2/
Lua菜鸟教程:中文https://www.runoob.com/lua/lua-tutorial.html

二、开发指南

1.准备工作

需要在设置中打开积木编程的无障碍开关方能进行使用,如果出现函数失效的问题,请重启无障碍开关再试下

部分函数仅支持 7 及其以上系统。

新建脚本会在 /mnt/sdcard/LuaBox/Projects/ 文件夹新建一个文件夹并生成 main.lua 文件,文件夹名称为第一次输入的脚本名称,修改脚本名称此文件夹名称不会改变。

此手册函数与触动函数不通用,请仔细查看函数手册。

找到目录时需要使用第三方文件管理器,推荐 :RE文件管理器

Lua 编程

经典的 “Hello world” 的程序总是被用来开始介绍一种语言。在 Lua 中,写一个这样的程序很简单:

print("Hello world")
-- 以上用法经过本人测试并不能在安卓端正确输入.

在 Lua 中,语句之间可以用分号 “;” 隔开,也可以用空白隔开。一般来说,如果多个语句写在同一行的话,建议总是用分号隔开。

Lua 有好几种程序控制语句,如:

条件控制: if 条件 then … elseif 条件 then … else … end

While 循环: while 条件 do … end

Repeat 循环: repeat … until 条件

For 循环: for 变量 = 初值,终点值,步进 do … end

For 循环: for 变量 1,变量 2,… ,变量 N in 表或枚举函数 do … end

注意一下,for 的循环变量总是只作用于 for 的局部变量,你也可以省略步进值,这时候,for 循环会使用 1 作为步进值。

你可以用 break 来中止一个循环。

如果你有程序设计的基础,比如你学过 Basic,C 之类的,你会觉得 Lua 也不难。但 Lua 有几个地方是明显不同于这些程序设计语言的,所以请特别注意。

关于 Lua 数组、迭代器、模块与包、元素、协同程序、文件 I/O、数据库访问等更多语法相关教程,请访问 Lua 菜鸟教程

注释

写一个程序,总是少不了注释的。

在 Lua 中,你可以使用单行注释和多行注释。

单行注释中,连续两个减号 “–” 表示注释的开始,一直延续到行末为止。相当于 C++ 语言中的 “//”。

多行注释中,由 “–[[” 表示注释开始,并且一直延续到 “]]” 为止。这种注释相当于 C 语言中的 “/**/”。在注释当中,"[[" 和 “]]” 是可以嵌套的。

语句块

语句块在 C++ 中是用 “{” 和 “}” 括起来的,在 Lua 中,它是用 do 和 end 括起来的。比如:

do print("Hello") end

你可以在函数和语句块中定义局部变量。

赋值语句

赋值语句在 Lua 被强化了,它可以同时给多个变量赋值。 例如:

a,b,c,d=1,2,3,4

甚至是:

a,b=b,a --多么方便的交换变量功能啊

在默认情况下,变量总是认为是全局的。假如你要定义局部变量,则在第一次赋值的时候,需要用 local 说明。比如

local a,b,c = 1,2,3 -- a,b,c 都是局部变量

循环语句

  • while 循环:while 条件 do … end
  • repeat 循环:repeat … until 条件
  • for 循环:for 变量 = 初值,终点值,步进 do … end
  • for 循环:for 变量 1,变量 2,… ,变量 N in表或枚举函数 do … end

while 循环

my_table = {1,2,3}
local index = 1  -- 注意: table 中的索引从 1 开始

while my_table[index] do   -- 只要条件返回 true,就一直执行循环 
print(my_table[index]) 
index = index +1   -- Lua 中没有 i++ 的写法,所以只能用这种写法
end

-- 输出 1
--      2
--      3

repeat 循环(相当于其他语言中的 do…while)

local snum = 1 --起始值

repeat
print("snum is "..snum)
snum = snum + 1
until snum == 4   --当 snum 等于 4 时 跳出循环

--输出:
--snum is 1
--snum is 2
--snum is 3

for 循环

for i = 1, #my_table do --#my_table 表示取表的长度,上边定义了长度为 3
print(my_table[i])
end
for i=1,10,2 do -- 这里i=1表示起始值, 10 表示最大值, 2 表示步进值(可以没有,默认值为 1,也就是其他语言里的 i++)
print(i)
end

注意一下,for 的循环变量总是只作用于 for 的局部变量,你也可以省略步进值,这时候,for 循环会使用 1 作为步进值。 可以用 break 来中止一个循环。

数值运算

字符串连接,函数与字符串连接

和 C 语言一样,支持+, -, *, /。但 Lua 还多了一个 “^”。这表示指数乘方运算。比如 2^3 结果为 8, 2^4 结果为 16。

连接两个字符串,可以用”…“运算符。如:

toast("This a " .. "string.")
-- 输出 "this a string"
a=34
b=22
toast("小明的年龄是:"..a.."小李的年龄是:"..b)
-- 输出为:小明的年龄是:34小李的年龄是:22

比较运算

参照网址:Lua 运算符
< > <= >= == ~=

分别表示 小于,大于,不大于,不小于,相等,不相等

所有这些操作符总是返回 true 或 false。

对于 Table,Function 和 Userdata 类型的数据,只有 == 和 ~=可以用。相等表示两个变量引用的是同一个数据。比如:

a={1,2}
b=a
print(a==b, a~=b) -- true, false
a={1,2}
b={1,2}
print(a==b, a~=b) -- false, true

逻辑运算

and, or, not

其中,and 和 or 与 C 语言区别特别大。

在这里,请先记住,在 Lua 中,只有 false 和 nil 才计算为 false,其它任何数据都计算为 true,0 也是 true!

and 和 or 的运算结果不是 true 和 false,而是和它的两个操作数相关。

a and b: 如果 a 为 false,则返回 a;否则返回 b

a or b: 如果 a 为 true,则返回 a;否则返回 b

举几个例子:

print(4 and 5) --> 5
print(nil and 13) --> nil
print(false and 13) --> false
print(4 or 5) --> 4
print(false or 5) --> 5

在Lua中这是很有用的特性,也是比较令人混洧的特性。

我们可以模拟 C 语言中的语句:

x = a? b : c

在 Lua 中,可以写成:

x = a and b or c

最有用的语句是:

x = x or v

它相当于:

if not x then x = v end

运算符优先级

从高到低顺序如下:

^

not - (一元运算)

* /

+ -

..(字符串连接)

< > <= >= ~= ==

and

or

关键字

关键字是不能做为变量的。Lua 的关键字不多,就以下几个:

and break do else elseif

end false for function if

in local nil not or

repeat return then true until while

变量类型

怎么确定一个变量是什么类型的呢?大家可以用 type() 函数来检查。Lua 支持的类型有以下几种:

Nil 空值

所有没有使用过的变量,都是 nil。nil 既是值,又是类型。

Boolean 布尔值

true 或 false

Number 数值

在 Lua 里,数值相当于 C 语言的 double

String 字符串

如果你愿意的话,字符串是可以包含 ‘\0’ 字符的

Table 关系表类型

这个类型功能比较强大,我们在后面慢慢说。

Function 函数类型

不要怀疑,函数也是一种类型,也就是说,所有的函数,它本身就是一个变量。

Userdata

嗯,这个类型专门用来和 Lua 的宿主打交道的。宿主通常是用 C 和 C++ 来编写的,在这种情况下,Userdata 可以是宿主的任意数据类型,常用的有 Struct 和指针。

Thread 线程类型

在 Lua 中没有真正的线程。Lua 中可以将一个函数分成几部份运行。如果感兴趣的话,可以去看看 Lua 的文档。

变量的定义

所有的语言,都要用到变量。在 Lua 中,不管你在什么地方使用变量,都不需要声明,并且所有的这些变量总是全局变量,除非,你在前面加上 “local”。

这一点要特别注意,因为你可能想在函数里使用局部变量,却忘了用 local 来说明。

至于变量名字,它是大小写相关的。也就是说,A 和 a 是两个不同的变量。

定义一个变量的方法就是赋值。“=” 操作就是用来赋值的 我们一起来定义几种常用类型的变量吧。

Nil

正如前面所说的,没有使用过的变量的值,都是 Nil。有时候我们也需要将一个变量清除,这时候,我们可以直接给变量赋以 nil 值。如:

var1=nil -- 请注意 nil 一定要小写

Boolean

布尔值通常是用在进行条件判断的时候。

布尔值有两种:true 和 false。在 Lua 中,只有 false 和 nil 才被计算为 false,而所有任何其它类型的值,都是 true。比如 0,空串等等,都是 true。不要被C语言的习惯所误导,0 在 Lua 中的的确确是 true。你也可以直接给一个变量赋以 Boolean 类型的值,如:

varboolean = true

Number

在 Lua 中,是没有整数类型的,也不需要。一般情况下,只要数值不是很大(比如不超过100,000,000,000,000),是不会产生舍入误差的。在很多 CPU 上,实数的运算并不比整数慢。 实数的表示方法,同 C 语言类似,如: 4 0.4 4.57e-3 0.3e12 5e+20

String

字符串,总是一种非常常用的高级类型。在 Lua 中,你可以非常方便的定义很长很长的字符串。 字符串在 Lua 中有几种方法来表示,最通用的方法,是用双引号或单引号来括起一个字符串的,如:

"This is a string."

和 C 语言相同的,它支持一些转义字符,列表如下:

\a bell

\b back space

\f form feed

\n newline

\r carriage return

\t horizontal tab

\v vertical tab

\ backslash

" double quote

’ single quote

[ left square bracket

] right square bracket

由于这种字符串只能写在一行中,因此,不可避免的要用到转义字符。加入了转义字符的串,看起来实在是不敢恭维,比如:

"one line\nnext line\n\"in quotes\", 'in quotes'"

一大堆的 “” 符号让人看起来很倒胃口。如果你与我有同感,那么,我们在Lua中,可以用另一种表示方法:用 “[[“和”]]” 将多行的字符串括起来,如:

page = [[
<HTML>

   <HEAD>
     <TITLE>An HTML Page</TITLE>
   </HEAD>

   <BODY>
<HTML>
]]

值得注意的是,在这种字符串中,如果含有单独使用的 “[[” 或 “]]” 就仍然得用 “[” 或 ”]" 来避免歧义。当然,这种情况是极少会发生的。

Table

关系表类型,这是一个很强大的类型。我们可以把这个类型看作是一个数组。只是 C 语言的数组,只能用正整数来作索引;在 Lua 中,你可以用任意类型来作数组的索引,除了 nil。同样,在 C 语言中,数组的内容只允许一种类型;在 Lua 中,你也可以用任意类型的值来作数组的内容,除了 nil。

Table 的定义很简单,它的主要特征是用 “{” 和 “}” 来括起一系列数据元素的。比如:

T1 = {} -- 定义一个空表
T1[1]=10 -- 然后我们就可以象 C 语言一样来使用它了。
T1["John"]={Age=27, Gender="Male"}

这一句相当于:

T1["John"]={} -- 必须先定义成一个表,还记得未定义的变量是 nil 类型吗
T1["John"]["Age"]=27
T1["John"]["Gender"]="Male"

当表的索引是字符串的时候,我们可以简写成:

T1.John={}
T1.John.Age=27
T1.John.Gender="Male"

T1.John{Age=27, Gender="Male"}

这是一个很强的特性。

在定义表的时候,我们可以把所有的数据内容一起写在 “{” 和 “}” 之间,这样子是非常方便,而且很好看。比如,前面的 T1 的定义,我们可以这么写:

T1=
  {
        10, -- 相当于 [1] = 10
       [100] = 40,
          John= -- 如果你原意,你还可以写成:["John"] =
          {
                Age=27,   -- 如果你原意,你还可以写成:["Age"] =27
                Gender=Male   -- 如果你原意,你还可以写成:["Gender"] =Male
              },
          20 -- 相当于 [2] = 20
    }

看起来很漂亮,不是吗?

我们在写的时候,需要注意三点:

第一,所有元素之间,总是用逗号 “,” 隔开;

第二,所有索引值都需要用 “[” 和 “]” 括起来;如果是字符串,还可以去掉引号和中括号;

第三,如果不写索引,则索引就会被认为是数字,并按顺序自动从 1 往后编;

表类型的构造是如此的方便,以致于常常被人用来代替配置文件。是的,不用怀疑,它比 ini 文件要漂亮,并且强大的多。

Function

函数,在 Lua 中,函数的定义也很简单。典型的定义如下:

function add(a,b) -- add 是函数名字,a 和 b 是参数名字
return a+b -- return 用来返回函数的运行结果
end

请注意,return 语言一定要写在 end 之前。假如你非要在中间放上一句 return,那么请写成:do return end。

还记得前面说过,函数也是变量类型吗?上面的函数定义,其实相当于:

add = function (a,b) return a+b end

当你重新给 add 赋值时,它就不再表示这个函数了。你甚至可以赋给 add 任意数据,包括 nil(这样,你就清除了 add 变量)。Function 是不是很象 C 语言的函数指针呢?

和 C 语言一样,Lua 的函数可以接受可变参数个数,它同样是用 “…” 来定义的,比如:

function sum (a,b,)

如果想取得 … 所代表的参数,可以在函数中访问 arg 局部变量(表类型)得到。如

sum(1,2,3,4)

则,在函数中,

a = 1, b = 2, arg = {3, 4}

更可贵的是,它可以同时返回多个结果,比如:

function s()
  return 1,2,3,4
end
a,b,c,d = s() -- 此时,a = 1,b = 2,c = 3,d = 4

前面说过,表类型可以拥有任意类型的值,包括函数!因此,有一个很强大的特性是,拥有函数的表,哦,我想更恰当的应该说是对象吧。Lua可以使用面向对象编程了。不信?那我举例如下:

   t =
   {
     Age = 27
     add = function(self, n) self.Age = self.Age+n end
    }
    print(t.Age) -- 27
    t.add(t, 10)
    print(t.Age) -- 37

不过,t.add(t,10) 这一句实在是有点土对吧?没关系,在 Lua 中,你可以简写成:

t:add(10)   -- 相当于 t.add(t,10)

Lua常用函数

函数:type 判断数据类型

bool = type(str)

参数必填说明
str需要判断的数据
返回值说明
bool数据类型:“number”、“string”、“boolean”、“table”、“function”、“thread”、“userdata”

函数用例

num = 111
str = tostring(num)
dialog("转换后的内容:"..str.."\r\n".."数据类型:"..type(str),5000)

函数:require 加载模块

函数名称:加载模块

函数名称:加载模块

函数方法

bool = require(modle)

参数类型必填说明
modlestring需要加载的模块名称
返回值说明
bool模块返回值

函数用例

--加载 lua 文件
--如果要加载 ceshi.lua 文件代码如下
require("ceshi")

注意事项

  • 加载文件和被加载文件存放在相同脚本文件夹下才能调用成功,否则会提示模块不存在。推荐加载文件和被加载文件放到 IDE 的相同工程下,选择工程 - 点击鼠标右键 - 点击发送工程到设备上。
  • 特别注意不要加载触动的 so 及 TSLib.lua,触动的 so 仅支持触动,不支持积木编程,触动函数和积木函数不通用。*

函数:tonumber 将字符串转成数字

函数名称:将字符串转成数字

函数方法

num = tonumber(str, base)

参数类型必填说明
strstring需要转换的字符串
basestring原字符进制类型,不写默认为 10
返回值类型说明
numnumber/nil转换后的数字

函数用例

str = "111"
num = tonumber(str)
dialog("转换后的内容:"..num.."\r\n".."数据类型:"..type(num),5000)

注意事项

  • 当调用 base 时,则 str 应该是一个字符串,该字符串将被解释为该基数中的整数。基数可以是 2 到 36 之间(包括 2 和 36)的任何整数。在 10 以上的基数中,字母’A’(大写或小写)代表 10,‘B’ 代 表 11,依此类推,‘Z’ 代表 35

函数:tostring 将数字转成字符串

函数名称:将数字转成字符串

函数方法

str = tostring(num)

参数类型必填说明
numnumber需要转换的数字
返回值类型说明
strstring/nil转换后的字符串

函数用例

num=111
str = tostring(num)
dialog("转换后的内容:"..str.."\r\n".."数据类型:"..type(str),5000)

函数:pcall 保护模式调用

函数名称:保护模式调用

函数功能:保护执行 function 函数, function 内部发生的错误不会影响脚本运行

函数方法

bool,msg = pcall(fun,action,…)

参数类型必填说明
funfunction待调用参数
action-待传入 fun 的参数,支持多个参数
返回值类型说明
boolbooleantrue - 无错误,false - 有错误
msg-有错误时返回错误信息

函数用例

bool,msg = pcall(function(i) print(i) error('error..') end,33)
if bool then
    dialog("无错误",5000)
else
    dialog(msg,5000)
end

IO 相关参数

函数:io.open 按模式打开文件

函数名称:按模式打开文件

函数功能:以字符串指定的模式打开文件

函数方法

file,msg = io.open(filename,mode)

参数类型必填说明
filenamestring需要打开的文件路径
modestring打开模式,不写默认为 "r"

mode 参数介绍

参数说明
"r”读取模式(默认)
"w”写模式
"a”追加模式
"r+"更新模式,所有以前的数据都保留
"w+"更新模式,以前的所有数据都被删除
"a+"追加更新模式,保留以前的数据,只允许在文件末尾写入
"b"二进制方式
返回值类型说明
fileuserdata/nil成功返回打开文件的句柄,失败返回 nil
msgstring返回报错信息

函数用例

file,msg = io.open("/mnt/sdcard/kazhu.txt")
if file then
    dialog("打开成功",5000)
    file:close()
else
    dialog("打开失败,失败原因:"..msg,5000)
end

函数:io.type 判断句柄

函数名称:判断句柄

函数功能:判断是否为有效句柄

函数方法

bool = io.type(file)

参数类型必填说明
fileuserdata需要判断的文件句柄
返回值类型说明
boolstring“file“ - 一个打开的文件句柄,"closed file“ - 为一个已关闭的文件句柄,nil - 不是文件句柄

函数用例

file,msg = io.open("/mnt/sdcard/kazhu.txt")
bool = io.type(file)
if bool == "file" then
    dialog("是文件句柄",5000)
elseif bool == "closed file" then
    dialog("句柄已关闭",5000)
elseif bool == nil then
    dialog("不是文件句柄",5000)
end

函数:io.read 按模式读取文件

函数名称:按模式读取文件

函数功能:按指定模式读取文件

函数方法

file,msg=io.read(format)

参数类型必填说明
formatstring读取格式 / 读取的字节数,不写默认值 :"*l"
参数说明
"*n"读取一个数字
"*a":从当前位置读取整个文件,若为文件尾返回空字串
"*l"读取下一行的内容,若为文件尾返回 nil
number读取指定字节数的字符,若为文件尾返回 nil;如果 number 为 0 则返回空字串;若为文件尾,则返回 nil
返回值类型说明
fileuserdata/nil成功返回打开文件的句柄,失败返回 nil
msgstring返回报错信息

函数用例

file,msg = io.open("/mnt/sdcard/kazhu.txt")
if file then
    dialog("文件全部内容:"..file:read("*a"),5000)
    file:close()
else
    dialog("打开失败,失败原因:"..msg,5000)
end

函数:io.write 写入到文件

函数名称:写入到文件

函数功能:写入到文件

函数方法

io.write(str)

参数类型必填说明
strstring/number需要写入的内容

函数用例

file,msg = io.open("/mnt/sdcard/888.txt","r+")
if file then
    file:write("1")
    mSleep(2000)
    dialog(file:read("*n"),5000)
    file:close()
else
    dialog("打开失败,失败原因:"..msg,5000)
end

函数:io.close 关闭文件句柄

函数名称:关闭文件句柄

函数功能:关闭文件句柄

函数方法

io.close()

函数用例

file,msg = io.open("/mnt/sdcard/kazhu.txt")
if file then
    dialog("打开成功",5000)
    file:close()
else
    dialog("打开失败,失败原因:"..msg,5000)
end

OS相关函数

函数:os.date 格式化日期

函数名称:格式化日期

函数功能:格式化日期

函数方法

str = os.date(format,timeout)

参数类型必填说明
formatstring格式化字符串 / 格式符
timeoutstring指定格式化的时间, 不写默认为当前时间

格式化字符串

格式符类型类型
%a一星期中天数的简写(Fri)
%A一星期中天数的全称(Wednesday)
%b月份的简写(Sep)
%B月份的全称(May)
%c日期和时间(09/16/98 23:48:10)
%d一个月中的第几天(28)[0 - 31]
%H24 小时制中的小时数(18)[00 - 23]
%I12 小时制中的小时数(10)[01 - 12]
%j一年中的第几天(209)[01 - 366]
%M分钟数(48)[00 - 59]
%m月份数(09)[01 - 12]
%P上午或下午(pm)[am - pm]
%S一分钟之内秒数(10)[00 - 59]
%w一星期中的第几天(3)[0 - 6 = 星期天 - 星期六]
%W一年中的第几个星期(2)0 - 52
%x日期(09/16/98)
%X时间(23:48:10)
%y两位数的年份(16)[00 - 99]
%Y完整的年份(2016)
%%字符串'%'(%)
参数类型说明
strstring/table格式化后的时间

函数用例

--获取当前日期及时间
local nowTime = os.date("*t",os.time()) --返回一个 table
dialog(nowTime.year,5) --dialog(nowTime.month,5) --dialog(nowTime.day,5) --dialog(nowTime.hour,5) --小时
dialog(nowTime.min,5) --分钟
dialog(nowTime.sec,5) --秒钟
dialog(nowTime.yday,5) --显示当前为一年中的第几天
--时间戳格式化当前时间
local nowTime = os.date("%Y-%m-%d %H:%M:%S", os.time())
dialog(nowTime,5000)
--获取今天是星期几
local today = tonumber(os.date("%w",os.time()))
if today ==0 then
    dialog("今天是周日",5000)
elseif  today ==6 then
    dialog("今天是周六",5000)
elseif  today ==1 then
    dialog("今天是周一",5000)
elseif  today ==2 then
    dialog("今天是周二",5000)
elseif  today ==3 then
    dialog("今天是周三",5000)
elseif  today ==4 then
    dialog("今天是周四",5000)
elseif  today ==5 then
    dialog("今天是周五",5000)
end

函数:os.time 格式化时间

函数名称:格式化时间

函数功能:将时间转成时间戳

函数方法

exampletime = os.time(timeout)

参数类型必填说明
timeouttable指定格式化的时间, 不写默认为当前时间

timeout 参数介绍

格式符类型说明
hournumber小时
minnumber分钟
wdaynumber星期
daynumber日期
monthnumber月份
yearnumber
secnumber
ydaynumber一年当中第几天
isdsboolean夏时令
参数类型说明
exampletimenumber转换后的时间戳

函数用例

--获取当前时间的时间戳
local exampletime = os.time();
dialog("转换后的时间戳:"..exampletime)
dialog(os.date("%c",exampletime))
local exampletime = os.time({year=2020,month=12,day=25,hour=8,min=0,sec=0})
dialog("转换后的时间戳:"..exampletime)
dialog(os.date("%c",exampletime))

函数:os.rename 重命名文件(夹)

函数名称:重命名文件(夹)

函数功能:修改文件(夹)名称

函数方法

bool,msg = os.rename (oldname, newname)

参数类型必填说明
oldnamestring修改前的文件路径及名称
newnamestring修改后的文件路径及名称
参数类型说明
boolboolean成功 - tue,失败 - nil
msgstring失败返回的错误信息

函数用例

bool,msg = os.rename ("/mnt/sdcard/111/","/mnt/sdcard/222/")
if bool then
    dialog("修改成功",5000)
else
    dialog("修改失败,失败原因:"..msg,5000)
end

函数:os.remove 删除文件

函数名称:删除文件

函数功能:删除文件

函数方法

bool,msg = os.remove(filename)

参数类型必填说明
filenamestring需要删除的文件路径
参数类型说明
boolboolean成功 - tue,失败 - nil
msgstring失败返回的错误信息

函数用例

bool,msg = os.remove("/mnt/sdcard/111/")
if bool then
    dialog("删除成功",5000)
else
    dialog("删除失败,失败原因:"..msg,5000)
end

函数:os.execute 执行 shell 命令

函数名称:执行 shell 命令

函数功能:执行 shell 命令

函数方法

os.execute(command)

参数类型必填说明
commandstring需要执行的 shell 命令
## string 相关函数

函数:string.find 查找字符串

函数名称:查找字符串

函数功能:根据匹配项查找数据

函数方法

num1,num2 = string.find(s,pattern,in,plain)

参数类型必填说明
sstring原字符串
patternstring待查找的字符串或模式匹配
innumber从第几个字符开始搜索,不写默认为 1
pllainboolean是否搜索纯文本,否即支持模式匹配搜索,不写默认为 false
返回值类型说明
num1number/nilpattern 位于 s 的起点位置,nil 为没找到
num2number/nilpattern 位于 s 的终点位置, nil 为没找到

模式匹配用法

参数说明
.任意字符
%s空白符
%p标点字符
%c控制字符
%d数字
%x十六进制数字
%z代表 0 的字符
%a字母
%l小写字母
%u大写字母
%w字母和数字

函数用例

num1,num2 = string.find("bbaaadd","aaa")
if num1~= nil and num2~= nil then
dialog("开始位置:"..num1.."\r\n".."结束位置:"..num2,5000)
else
    dialog("未找到",5000)
end

函数:string.format 格式化字符串

函数名称:格式化字符串

函数功能:将字符串进行格式化,返回一个类似 printf 的格式化字符串

函数方法

st = string.find(str,arg)

参数类型必填说明
strstring待格式化的字符串 / 模式匹配
arg-任意内容,需要与 str 模式匹配支持的类型(number/string)相同

模式匹配用法

参数类型
%c接收一个数字, 并将其转化为 ASCII 码表中对应的字符
%d、%i接收一个数字并将其转化为有符号的整数格式
%o接收一个数字并将其转化为八进制数格式
%u接收一个数字并将其转化为无符号整数格式
%x接收一个数字并将其转化为十六进制数格式, 使用小写字母
%X接收一个数字并将其转化为十六进制数格式, 使用大写字母
%e接收一个数字并将其转化为科学记数法格式, 使用小写字母 e
%E接收一个数字并将其转化为科学记数法格式, 使用大写字母 E
%f接收一个数字并将其转化为浮点数格式
%g(%G)接收一个数字并将其转化为 %e(%E 对应 %G) 及 %f 中较短的一种格式
%q接收一个字符串并将其转化为可安全被 Lua 编译器读入的格式
%s接收一个字符串并按照给定的参数格式化该字符串
返回值类型说明
ststring/nil格式化后的字符串

函数用例

st = string.format("just do %s","it")
dialog(st,5000)

注意事项

  • 选项 c,d,e,E,f,g,G,i,o,u,x,X 只接数字作为参数,而 q,s 接收字符串作为参数

函数:string.gmatch 全局模式匹配

函数名称:全局模式匹配

函数功能:创建并返回一个迭代器,可用于 for 语句中迭代的进行全局查找

函数方法

str = string.match(s,pattern)

参数类型必填说明
sstring原字符串
patternstring待查找的字符串或模式匹配
返回值类型说明
strstring/nil格式化后的字符串,nil 为没找到

模式匹配用法

参数说明
.任意字符
%s空白符
%p标点字符
%c控制字符
%d数字
%x十六进制数字
%z代表 0 的字符
%a字母
%l小写字母
%u大写字母
%w字母和数字

函数用例

s = "a1 B c d"
for w in string.gmatch(s, "%l+") do
    dialog(w,5000)
end

函数:string.gsub 字符串替换

函数名称:字符串替换

函数功能:字符串替换

函数方法

str,num = string.gsub(s,pattern,repl,n)

参数类型必填说明
sstring/table/number原字符串
patternstring/table/number待查找的字符串或模式匹配
replstring/table/number待替换的字符串
nnumber替换次数

模式匹配用法

参数说明
.任意字符
%s空白符
%p标点字符
%c控制字符
%d数字
%x十六进制数字
%z代表 0 的字符
%a字母
%l小写字母
%u大写字母
%w字母和数字
返回值类型说明
strstring/number/nil替换后的内容
numnumber替换次数

函数用例

str,num=string.gsub("juaa do it","aa","st")
dialog("替换后的内容:"..str.."\r\n".."替换次数:"..num,5000)

函数:string.len 获取字符串长度

函数名称:获取字符串长度

函数功能:获取字符串长度

函数方法

num = string.len(str)

参数类型必填说明
strstring需要计算的字符串
返回值类型说明
numnumber/nil字符串长度

函数用例

str="JUST DO IT"
num = string.len(str)
dialog("字符串长度:"..num,5000)

函数:string.match 字符串查找

函数名称:字符串查找

函数功能:字符串查找

函数方法

str =string.match(s,pattern,in)

参数类型必填说明
sstring原字符串
patternstring待查找的字符串或模式匹配
instring从 s 的第 in 个字符开始搜索,不写默认为 1
返回值类型说明
strstring找到结果返回整个配对字符串,失败返回 nil

模式匹配用法

参数说明
.任意字符
%s空白符
%p标点字符
%c控制字符
%d数字
%x十六进制数字
%z代表 0 的字符
%a字母
%l小写字母
%u大写字母
%w字母和数字

函数用例

s = "您申请了邮箱注册,验证码为:123abc,两分钟内有效。请在注册页面中输入以完成注册。"
str = string.match(s,"%w+")
dialog(str,5000)

函数:string.rep 复制字符串

函数名称:复制字符串

函数功能:复制字符串

函数方法

str = string.rep(s,n,sep)

参数类型必填说明
sstring原字符串
nnumber复制次数
sepstring间隔依据,不写默认为空
返回值类型说明
strstring复制后的字符串

函数用例

s = "go"
str = string.rep(s,3," ")
dialog(str,5000)

函数:string.reverse 字符串反转

函数名称:字符串反转

函数功能:将字符串倒序显示

函数方法

str2 = string.reverse(str1)

参数类型必填说明
str1string需要转换的内容
返回值类型说明
str2string转换后的内容

函数用例

str1 = "ti od tsuj"
str2 = string.reverse(str1)
dialog("转换后内容:"..str2,5000)

函数:string.sub 字符串截取

函数名称:字符串截取

函数功能:按照规则截取字符串

函数方法

str = string.sub(s,i,j)

参数类型必填说明
sstring待截取的字符串
inumber开始截取位置
jstring停止截取位置,不写默认为 i
返回值类型说明
strstring截取的字符串

函数用例

s="just do it"
str = string.sub(s,6,7)
dialog("截取的内容:"..str,5000)

函数:string.upper 小写字母转大写

函数名称:小写字母转大写

函数功能:将所有小写字母转成大写

函数方法

str2 = string.upper(str1)

参数类型必填说明
str1string需要转换的内容
返回值类型说明
str2string转换后的内容

函数用例

str1 = "just do it"
str2 = string.upper(str1)
dialog("转换后的大写字母内容:"..str2,5000)

函数:string.lower 大写字母转成小写

函数名称:大写字母转成小写

函数功能:将所有大写字母转成小写

函数方法

str2 = string.lower(str1)

参数类型必填说明
str1string需要转换的内容
返回值类型说明
str2string转换成大写后的内容

函数用例

str1="JUST DO IT"
str2 = string.lower(str1)
dialog("转换后的内容:"..str2,5000)

函数:string.byte 字符串转 ASCII 编码

函数名称:字符串转 ASCII 编码

函数功能:将字符串进行 ASCII 编码

函数方法

num1,num2,num3,… = string.byte(str.i,j)

参数类型必填说明
strstring需要进行编码的字符串
inumber截取起点,不写默认值为 1
jnumber截取终点,不写默认值为 i
返回值类型说明
numnumber/nil编码后的字符串

函数用例

num1,num2,num3=string.byte("ceshi",1,3)
dialog(num1.."\r\n"..num2.."\r\n"..num3,5000)

函数:string.char ASCII 编码转字符串

函数名称:ASCII 编码转字符串

函数功能:将 ASCII 编码转成字符串

函数方法

str = string.char(num1,num2,num3,…)

参数类型必填说明
numnumber需要进行操作的 ASCII 编码,可以是多个数据
返回值类型说明
numnumber/nil转码后的字符串

函数用例

num1,num2,num3 = string.byte("ceshi",1,3)
dialog(num1.."\r\n"..num2.."\r\n"..num3,5000)
mSleep(1000)
str = string.char(num1,num2,num3)
dialog(str,5000)

table相关函数

函数:table.concat 数组连接

函数名称:连接数组

函数功能:连接数组

函数方法

str = table.concat (tb,sep,i, j)

参数类型必填说明
tbtable待操作数组
sepstring分割的字符
inumbertb[i] 起点,默认值: 1
jnumbertb[j] 终点,, 默认值: #tb
返回值类型说明
strstring连接后的字符串

函数示例

tb = {"a","b","c","d",1,2,3,4}
str = table.concat(tb,"|")
dialog(str,5000)

函数:table.insert 插入数据到数组

函数名称:插入数据到数组

函数功能:插入数据到数组

函数方法

table.insert (tab_table, pos,value)

参数类型必填说明
tab_tablestring待操作的数组
posnumber待插入位置,不写默认值为 #tab_table
valuevalue待插入的内容

函数示例

tab_table = {1,2,3,4,5,6,7,8,9,10}
table.insert(tab_table,11)
dialog(tab_table[11],5000)

基本函数

函数:mSleep 延时

函数名称:等待延迟,延时

函数功能:发送系统等待事件,单位毫秒

函数方法

mSleep(interval)

返回值:无

参数类型必填说明
intervalnumber单位为毫秒,脚本暂停执行的时间长度

函数用例

延迟 1 秒和 1 分钟

mSleep(1000);       --延迟 1 秒钟
mSleep(60*1000)   --此函数不适合用于长时间的精确计时,如长时间的精确计时请使用 os.time

注意事项

  • 延迟函数的使用与各类函数的使用息息相关,尤其是触摸类函数。脚本一般是用来模拟人在界面上的操作,因此要考虑人在各种情况下的延迟、界面加载时的响应时间。
  • 延迟间隔不可过短,当 interval <= 50 ms 时,延迟精确度大幅下降,当 interval <= 16 ms 时,实际延迟约在 16 ms 左右。
  • 请勿将此函数用于长时间的精确计时。
  • 1 秒 (s) = 1000 毫秒 (ms)。

函数:mSleep 延时

函数名称:等待延迟,延时

函数功能:发送系统等待事件,单位毫秒

函数方法

mSleep(interval)

返回值:无

参数类型必填说明
intervalnumber单位为毫秒,脚本暂停执行的时间长度

函数用例

延迟 1 秒和 1 分钟

mSleep(1000);       --延迟 1 秒钟
mSleep(60*1000)   --此函数不适合用于长时间的精确计时,如长时间的精确计时请使用 os.time

注意事项

  • 延迟函数的使用与各类函数的使用息息相关,尤其是触摸类函数。脚本一般是用来模拟人在界面上的操作,因此要考虑人在各种情况下的延迟、界面加载时的响应时间。
  • 延迟间隔不可过短,当 interval <= 50 ms 时,延迟精确度大幅下降,当 interval <= 16 ms 时,实际延迟约在 16 ms 左右。
  • 请勿将此函数用于长时间的精确计时。
  • 1 秒 (s) = 1000 毫秒 (ms)。

函数:dialog 提示框

函数名称:对话框,弹窗,提示框

函数功能:弹出提示信息

函数方法

dialog(text,timeout)

返回值:无

参数类型必填说明
textstring提示信息,将在设备屏幕上以弹窗形式显示
timeoutnumber提示信息显示的时间,单位:毫秒,不限时间请填 0

脚本实例

欢迎使用

--Android 系统在部分设备上需要在系统设置里开启悬浮窗权限方可正常使用此函数
dialog("欢迎使用积木编程!",5000); 
mSleep(1000);
dialog("对话框。\n 提示信息可以换行");

注意事项

  • time 参数时间一般在 2 秒(2000 毫秒)以上,否则出现时间太短看不清楚。

  • 该函数仅供呈现提示信息给用户,不可接收返回值。

  • 该函数所产生的提示窗口显示的时候会影响当前屏幕取色,请在合理的位置使用该函数。

  • 关于转义字符:\r \n 为换行,请查阅 Lua 转义字符表。

函数:showTextView 简易文字视图

函数功能:显示自定义的文字内容

函数方法

showTextView(text,id,x1,y1,x2,y2,align,color,bgdcolor,size,kind,alpha,fwType,radius)

返回值:无

参数类型必填说明
textstring需要显示的文字内容
x1number窗口左上角顶点坐标横坐标,不写默认为 0
y1number窗口左上角顶点坐标纵坐标,不写默认为 0
x2number窗口右下角顶点坐标横坐标,不写默认为 200
y2number窗口右下角顶点坐标纵坐标,不写默认为 50
alignstring对齐方式,不写默认为 center,
left - 左对齐;right - 右对齐;center - 居中
colorstring文字颜色 16 进制值,填空字符串默认为黑色(ffffff)
bgcolorstring视图背景色 16 进制值,填空字符串默认为透明(000000)
sizenumber字号,填 0 默认值为 15
kindnumber字体类型,不写默认为 0,0 - 标准;1- 粗体
alphanumber背景色透明度 0 - 1,不写默认为 0.5
fwTypenumber窗口是否可以移动,默认为 1,1 - 窗口可移动;0 - 窗口不可移动

函数用例

showTextView("测试浮动窗口",100,100,600,300,"center","FFFFFF","000000",20,1,1,1,50)
mSleep(1000)

函数:closeTextView 关闭所有视图

函数功能:关闭所有视图

函数方法

closeTextView()

函数用例

showTextView("测试浮动窗口",100,100,600,300,"center","FFFFFF","000000",20,1,1,1,50)
mSleep(5000)
closeTextView()

函数:getRndNum 获取随机数

函数名称:获取随机数

函数功能:获取真随机数,随机数值

函数方法

num = getRndNum(min,max);

参数类型必填说明
minnumber随机范围的整数最小值
maxnumber随机范围的整数最大值
参数类型说明
numnumber获取到的随机数

函数用例

num = getRndNum(1,100) -- 随机获取一个 1 - 100 之间的数字
dialog(num,5000)

模拟点击

函数:event.tap 点击(仅支持 7 及其以上系统)

函数名称:点击

函数功能: 模拟点击屏幕,按下抬起一次

函数方法

event.tap(x,y)

参数类型必填说明
xnumber屏幕横坐标
ynumber屏幕纵坐标

函数用例

点击屏幕

--仅支持安卓 7 及其以上系统
--在坐标 (150, 550)按下、抬起
event.tap(150, 550);   
mSleep(30)

注意事项

  • 点击后可以加适量的延时

  • 仅支持安卓 7 及其以上系统

函数:event.moveTo 滑动(仅支持 7 及其以上系统)

函数名称:滑动

函数功能:两点之间直线滑动

函数方法

event.moveTo(x1,y1,x2,y2)

参数类型必填说明
x1number屏幕起点横坐标
y1number屏幕起点纵坐标
x2number屏幕终点横坐标
y2number屏幕终点纵坐标

函数用例

-- 仅支持安卓 7 及其以上系统
--从(100,100)点滑动到(300,100)点
event.moveTo(100,100,300,100)

注意事项

  • 仅支持安卓 7 及其以上系统

函数:event.press 长按(仅支持安卓 7 及其以上系统)

函数名称:长按

函数功能:在一点进行长按

函数方法

event.press((x,y,time)

参数类型必填说明
xnumber横坐屏幕标
ynumber屏幕纵坐标
timenumber长按时间,单位:毫秒,不写默认为 1000 毫秒

函数用例

--在点(100,100)长按 3--仅支持安卓 7 及其以上系统
event.press(100,100,3000)

注意事项

  • 仅支持安卓 7 及其以上系统

  • 1 秒 = 1000 毫秒

函数:widget.find 根据属性组合查找控件

函数功能: 根据属性组合查找控件

函数方法

wid,tab = widget.find(tb)

参数类型必填说明
tb.idstring控件 ID,可以使用 IDE 的控件节点进行获取
tb.textstring文本,可以使用 IDE 的控件节点进行获取
tb.typestring类型,可以使用 IDE 的控件节点进行获取
tb.descstring描述,可以使用 IDE 的控件节点进行获取
tb.pathstring路径,可以使用 IDE 的控件节点进行获取
tb.rulenumber默认为 0 - 完全匹配,1 - 部分匹配,2 - 开头匹配,
3 - 结尾匹配,仅支持 text、type、desc 参数
tb.long-clickablestring是否可以长按,false - 不可以长按,ture - 可以长按,
仅支持 v1.0.1 及其以上版本
tb.clickablestring是否可以点击,fasle - 不可点击,true - 可以点击,
仅支持 v1.0.1 及其以上版本
tb.scrollablestring是否可以滚动,false - 不可以滚动,true - 可以滚动,
仅支持 v1.0.1 及其以上版本
tb.editablestring是否可以编辑,false - 不可以编辑,ture - 可以编辑,
仅支持 v1.0.1 及其以上版本
tb.checkablestring是否可以选中,false - 不可以选中,true - 可以选中,
仅支持 v1.0.1 及其以上版本
tb.whichnumber不写默认为 1,指定第几个控件,
仅支持 v1.0.2 及其以上版本客户端
返回值类型说明
widuserdata/nil查找成功则返回控件对象,失败返回空
tabtable返回 id、text、type、desc 等包含 tb 的所有信息,
仅支持 v1.0.3 及其以上版本客户端

函数用例


mSleep(1000)
wid,tab =widget.find({["text"]="浏览器"})
if wid ~= nil then
    mSleep(1000)
    toast("控件已找到")
    mSleep(1000)
    --点击控件
    widget.click(wid)
    for k,v in pairs(tab) do
        toast(k .. ":" .. (type(v) == "boolean" and (v and "true" or "false") or v),5)
        mSleep(2000)
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)
end

函数:widget.desc 根据描述属性查找控件

函数功能: 根据描述属性查找控件

函数方法

wid= widget.desc(desc,rule);

wid= widget.desc(desc,{rule,which});

参数类型必填说明
descstring要查找的描述信息,可以使用 IDE 的控制节点进行获取
rulenumber不写默认为 0 - 完全匹配 ,1 - 部分匹配,2 - 完全匹配,
3 - 开头匹配,4 - 结尾匹配
whichnumber不写默认为 1,指定第几个控件,
仅支持 v1.0.2 及其以上版本客户端

函数用例

--在显示积木编程图标的页面运行

mSleep(1000)
desc = "积木编程"
wid = widget.desc(desc,1)
--wid = widget.desc(desc,{["rule"]=1,["which"]=1})
if wid ~= nil then
    mSleep(1000)
    toast("控件已找到")
    mSleep(1000)
    --点击控件
    widget.click(wid)
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.id 根据属性查找控件

函数功能: 根据属性查找控件

函数方法

wid = widget.id(id)

wid = widget.id(id,{which})

参数类型必填说明
idstring要查找的控件 ID,可以使用 IDE 的控制节点进行获取
whichnumber不写默认为 1,指定第几个控件,
仅支持 v1.0.2 及其以上版本客户端
返回值类型说明
widuserdata/nil查找成功则返回控件对象,失败返回空

函数用例

--脚本页面运行,找右上角的新建脚本按钮

mSleep(1000)
id = "com.play4u.luabox:id/iv_script_new"
wid = widget.id(id)
--wid = widget.id(id,{["which"]=1})
if wid ~= nil then
    mSleep(1000)
    toast("控件已找到")
    mSleep(1000)
    --点击控件
    widget.click(wid)
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.text 根据文本属性查找控件

函数功能: 根据文本属性查找控件

函数方法

wid = widget.text(text,rule)

wid = widget.text(text,{rule,which})

参数类型必填说明
textstring文本属性,可以使用 IDE 的控件节点进行获取
rulenumber不写默认为 0 - 完全匹配 ,1 - 部分匹配,2 - 开头匹配,3 - 结尾匹配
whichnumber不写默认为 1,指定第几个控件,仅支持 v1.0.2 及其以上版本客户端
返回值类型说明
widuserdata/nil查找成功则返回控件对象,失败返回空

函数用例

--在脚本页面,找左上角的脚本文字

mSleep(1000)
text="脚本"
wid = widget.text(text,1)
--wid = widget.text(text,1,{["which"]=1})
if wid ~= nil then
    mSleep(1000)
    toast("控件已找到")
    mSleep(1000)
    --点击控件
    widget.click(wid)
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.region 获取控件的区域属性

函数功能: 获取控件区域坐标范围

函数方法

x1,y1,x2,y2 = widget.region(wid)

参数类型必填说明
widuserdata控件对象
返回值类型说明
x1string区域左上角横坐标,找不到返回 nil
y1string区域左上角纵坐标,找不到返回 nil
x2string区域右下角横坐标,找不到返回 nil
y2string区域有下级角纵坐标,找不到返回 nil

函数用例

--在脚本页面,找左上角的脚本文字

mSleep(1000)
wid = widget.find({["id"]="com.play4u.luabox:id/iv_script_new"})
if wid ~= nil then
x1,y1,x2,y2 = widget.region(wid)
if x1 ~= nil then
    event.tap(x1,y1);
else
    mSleep(1000)
    toast("区域获取为空",5)
    mSleep(5000)
end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.longclickable 判断控件是否可以长按

函数功能: 判断控件获取是否可以长按

函数方法

flag = widget.longclickable(wid)

参数类型必填说明
widuserdata控件对象
返回值类型说明
flagbooleantrue - 可以长按,false - 不可以长按

函数用例

--在脚本页面,右上角的创建脚本按钮

mSleep(1000)
wid = widget.find({["id"]="com.play4u.luabox:id/iv_script_new"})
if wid ~= nil then
    flag = widget.longclickable(wid)
    if flag then
        mSleep(1000)
        toast("此控件可以长按",5)
        mSleep(5000)  
    else
        mSleep(1000)
        toast("此控件不支持长按",5)
        mSleep(5000)  
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)  
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.checkable 判断控件是否可勾选

函数功能: 判断控件是否可以勾选

函数方法

flag = widget.checkable(wid)

参数类型必填说明
widuserdata控件对象
返回值类型说明
flagbooleantrue - 可以勾选,false - 不可以勾选

函数用例

--在删除脚本页面,长按要删除的脚本可以进入此页面,全选按钮

mSleep(1000)
wid = widget.find({["id"]="com.play4u.luabox:id/cb_select"})
if wid ~= nil then
    flag = widget.checkable(wid)
    if flag then
        mSleep(1000)
        toast("此控件可以勾选",5)
        mSleep(5000)  
    else
        mSleep(1000)
        toast("此控件不支持勾选",5)
        mSleep(5000)  
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)  
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.scrollable 判断控件是否可滚动

函数功能: 判断控件是否可以滚动

函数方法

flag = widget.scrollable(wid)

参数类型必填说明
widuserdata控件对象
返回值类型说明
flagbooleantrue - 可以滚动,false - 不可以滚动

函数用例

--脚本界面运行

mSleep(1000)
wid = widget.find({["id"]="com.play4u.luabox:id/item_rl_top"})
if wid ~= nil then
    flag = widget.scrollable(wid)
    if flag then
        mSleep(1000)
        toast("此控件可以滚动",5)
        mSleep(5000)  
    else
        mSleep(1000)
        toast("此控件不可以滚动",5)
        mSleep(5000)  
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)  
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.editable 获取控件是否可以输入

函数功能: 判断控件是否可以输入

函数方法

flag = widget.editable(wid)

参数类型必填说明
widusedata控件对象
返回值类型说明
flagbooleantrue - 可以输入文字,false - 不支持输入文字

函数用例

--脚本页面 点击新建脚本按钮 输入文字

mSleep(1000)
wid = widget.find({["id"]="com.play4u.luabox:id/iv_script_new"})
if wid ~= nil then
    widget.click(wid)
    mSleep(3000)
    wid1 = widget.find({["id"]="com.play4u.luabox:id/et_content"})
    --判断新建脚本页面是否打开
    if wid1 ~= nil then
        --判断是否支持输入文字
        flag = widget.editable(wid1)
        if flag then
            mSleep(1000)
            toast("此控件支持输入",5)
            mSleep(5000)
            --输入文字
            widget.setText(wid,"输入")
        else
            mSleep(1000)
            toast("此控件不支持输入",5)
            mSleep(5000)
        end
    else
        mSleep(1000)
        toast("控件未找到",5)
        mSleep(5000)
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.visibleToUser 控件是否可见

函数功能: 判断控件是否可见

函数方法

flag = widget.visibleToUser(wid)

参数类型必填说明
widusedata控件对象
返回值类型说明
flagbooleantrue - 可见控件,false - 不可见控件

函数用例

--脚本页面新脚本按钮

mSleep(1000)
wid = widget.find({["id"]="com.play4u.luabox:id/iv_script_new"})
if wid ~= nil then
    flag = widget.visibleToUser(wid)
    if flag then
        mSleep(1000)
        toast("可见控件",5)
        mSleep(5000)    
    else
        mSleep(1000)
        toast("不可见控件",5)
        mSleep(5000)    
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)    
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.enabled 判断控件是否可以激活

函数功能: 判断控件是否可以激活

函数方法

flag = widget.enabled(wid)

参数类型必填说明
widusedata控件对象
返回值类型说明
flagbooleantrue - 可以激活,false - 不可以激活

函数用例

--脚本页面运行

mSleep(1000)
wid = widget.find({["id"]="com.play4u.luabox:id/iv_script_new"})
if wid ~= nil then
    flag = widget.enabled(wid)
    if flag then
        mSleep(1000)
        toast("此控件可以激活",5)
        mSleep(5000)    
    else
        mSleep(1000)
        toast("此控件不可以激活",5)
        mSleep(5000)    
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)    
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.clickable 判断控件是否可点击

函数功能: 判断控件是否可以点击

函数方法

flag = widget.clickable(wid)

参数类型必填说明
widuserdata控件对象
返回值类型说明
flagbooleantrue - 可以点击,false - 无法点击

函数用例

--在脚本页面,右上角的新建脚本按钮是否可以点击

mSleep(5000)
wid = widget.find({["id"]="com.play4u.luabox:id/iv_script_new"})
if wid ~= nil then
    flag  = widget.clickable(wid)
    if flag  then
        mSleep(1000)
        toast("此控件可以点击",5)
        mSleep(5000)
        --点击控件
        widget.click(wid)
    else
        mSleep(1000)
        toast("此控件不支持点击",5)
        mSleep(5000)
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.selected 获取控件选中状态

函数功能: 判断控件是否可以选中

函数方法

flag = widget.selected(wid)

参数类型必填说明
widuserdata控件对象
返回值类型说明
flagbooleantrue - 可以选中,false - 不可以选中

函数用例

--脚本界面运行

mSleep(1000)
wid = widget.find({["id"]="com.play4u.luabox:id/item_rl_top"})
if wid ~= nil then
    flag = widget.selected(wid)
    if flag then
        mSleep(1000)
        toast("此控件可以选中",5)
        mSleep(5000)    
    else
        mSleep(1000)
        toast("此控件不可以选中",5)
        mSleep(5000)    
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)    
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.checked 判断控件勾选状态

函数功能: 判断控件是否勾选

函数方法

flag = widget.checked(wid)

参数类型必填说明
widuserdata控件对象
返回值类型说明
flagbooleantrue - 已勾选,false - 未勾选

函数用例

--在删除脚本页面,全选按钮是否勾选

mSleep(1000)
wid = widget.find({["id"]="com.play4u.luabox:id/cb_select"})
if wid ~= nil then
    flag = widget.checked(wid)
    if flag then
        mSleep(1000)
        toast("此控件已勾选",5)
        mSleep(5000)  
    else
        mSleep(1000)
        toast("此控件未勾选",5)
        mSleep(5000)  
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)  
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.click 点击控件

函数功能:点击控件

函数方法

widget.click(wid)

参数类型必填说明
widstring控件对象

函数用例

--脚本页面点击新建脚本按钮

mSleep(1000)
wid=widget.find({["id"]="com.play4u.luabox:id/iv_script_new"})
if wid ~= nil then
    --判断控件是否可以点击
    flag = widget.clickable(wid)
    if flag then
        mSleep(1000)
        toast("此控件支持点击",5)
        mSleep(5000)    
        widget.click(wid)
    else
        mSleep(1000)
        toast("此控件不支持点击",5)
        mSleep(5000)    
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)    
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.setText 对控件输入文本

函数功能:在控件中输入文字

函数方法

widget.setText(wid,text)

参数类型必填说明
widuserdata控件对象
textstring需要输入的文字

函数用例

--脚本页面 点击新建脚本按钮 输入文字

mSleep(1000)
wid = widget.find({["id"]="com.play4u.luabox:id/iv_script_new"})
if wid ~= nil then
    widget.click(wid)
    mSleep(3000)
    wid1 = widget.find({["id"]="com.play4u.luabox:id/et_content"})
    --判断新建脚本页面是否打开
    if wid1 ~= nil then
        --判断是否支持输入文字
        flag = widget.editable(wid1)
        if flag then
             mSleep(1000)
            toast("此控件可以输入文字",5)
            mSleep(5000)
            --输入文字
            widget.setText(wid,"输入")
        else
            mSleep(1000)
            toast("此控件不支持输入",5)
            mSleep(5000)
        end
    else
        mSleep(1000)
        toast("控件未找到",5)
        mSleep(5000)
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.longClick 长按控件

函数功能:长按控件

函数方法

widget.click(wid)

参数类型必填说明
widuserdata控件对象

函数用例

--脚本界面运行

mSleep(1000)
wid=widget.find({["id"]="com.play4u.luabox:id/rrl_create_script"})
if wid ~= nil then
    --判断是否可以长按
    flag = widget.longclickable(wid)
    if flag then
        mSleep(1000)
        toast("可以长按",5)
        mSleep(5000)
        widget.longClick(wid)
    else
        mSleep(1000)
        toast("此控件不支持长按",5)
        mSleep(5000)
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)    
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.scrollForward 向前滑动控件

函数功能:向前滑动

函数方法

widget.scrollForward(wid)

参数类型必填说明
widuserdata控件对象

函数用例

--脚本页面运行

mSleep(1000)
wid=widget.find({["id"]="com.play4u.luabox:id/item_rl_top"})
if wid ~= nil then
    --判断控件是否可以滑动
    flag = widget.scrollable(wid)
    if flag then
        toast("可以滑动",5)
        widget.scrollForward(wid)
    else
        mSleep(1000)
        toast("此控件不支持滑动",5)
        mSleep(5000)
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

函数:widget.scrollBackward 向后滑动控件

函数功能:向后滑动

函数方法

widget.scrollBackward(wid)

参数类型必填说明
widuserdata控件对象

函数用例

--脚本页面运行
mSleep(1000)
wid=widget.find({["id"]="com.play4u.luabox:id/item_rl_top"})
if wid ~= nil then
    --判断控件是否可以滑动
    flag = widget.scrollable(wid)
    if flag then
        toast("可以滑动",5)
        widget.scrollBackward(wid)
    else
        mSleep(1000)
        toast("此控件不支持滑动",5)
        mSleep(5000)
    end
else
    mSleep(1000)
    toast("控件未找到",5)
    mSleep(5000)
end

注意事项

  • 使用此函数不要使用 widget 做变量,否则会导致报错。

应用

函数:app.getName 获取应用名称

函数名称: 获取应用名称

函数功能: 根据应用包名获取应用名称

函数方法

name = app.getName(bid)

参数类型必填说明
bidstring应用包名
返回值类型说明
namestring应用名称

函数用例

bid = app.getPackageName("积木编程")
name = app.getName(bid)
dialog(name,5000)

函数:app.getVer 获取应用版本

函数名称: 获取应用版本

函数功能: 根据应用包名获取应用版本号

函数方法

versionName = app.getVer(bid)

参数类型必填说明
bidstring应用包名
返回值类型说明
versionNamestring应用版本号

函数用例

bid = app.getPackageName("积木编程")
versionName  = app.getVer(bid)
dialog(versionName,5000)

函数:app.frontPackageName 获取前台应用包名

函数名称: 获取前台应用包名

函数功能: 获取前台应用包名

函数方法

versionName = app.frontPackageName()

返回值类型说明
versionNamestring前台应用包名

函数用例

versionName = app.frontPackageName()
dialog(versionName,5000)

函数:app.runApp 运行应用

函数名称: 运行应用

函数功能: 打开一个应用程序

函数方法

flag = app.runApp(bid)

参数类型必填说明
bidstring应用包名
返回值类型说明
flagbooleantrue - 运行成功,false - 运行失败

函数用例

--启动设置
flag = app.runApp("com.android.settings")
if  flag == true then
    dialog("启动成功",5000)
else
    dialog("启动失败",5000)
end

函数:app.uninstallApp 卸载应用

函数名称: 卸载应用

函数功能: 卸载一个应用程序

函数方法

app.uninstallApp(bid)

参数类型必填说明
bidstring需要卸载的应用包名

函数用例

app.uninstallApp("com.touchsprite.android")

注意事项

  • 如果要卸载的应用在前台或者后台时,无法通过此函数卸载。

函数:app.openURL 打开网址

函数名称:打开网络地址

函数功能:调用系统浏览器,打开一个指定网址

函数方法

app.openURL(url)

参数类型必填说明
urstring需要打开的应用网址

函数用例

--打开 Luabox 官网
app.openURL("https://www.touchsprite.com/luabox")

文件IO函数

函数:file.isExist 判断文件(夹)是否存在

函数名称:判断文件(夹)是否存在

函数功能: 判断文件(夹)是否存在

函数方法

flag = file.isExist(path)

参数类型必填说明
pathstring需要判断的文件(夹)路径
返回值类型说明
flagbooleantrue - 文件(夹)存在,false - 文件(夹)不存在

函数用例

path = "/sdcard/LuaBox/Projects/"
flag = file.isExist(path)
if  flag then
    dialog("文件夹存在",5000)
else
    dialog("文件夹不存在",5000)
end

注意事项

函数:file.new 新建文件(夹)

函数名称:新建文件(夹)

函数功能: 在指定目录下新建文件(夹)

函数方法

flag = file.new(path)

参数类型必填说明
pathstring需要创建的文件(夹)路径
返回值类型说明
flagbooleantrue - 创建成功,false - 创建失败或者文件(夹)已存在

函数用例

path = "/sdcard/LuaBox/Projects/测/"
--创建文件夹
flag = file.new(path)
if  flag then
    dialog("文件夹创建成功",5000)
    --创建文件
    path1 = "/sdcard/LuaBox/Projects/测/main.lua"
    flag1 = file.new(path1)
    if flag1 then
        dialog("文件创建成功",5000)
    else
        dialog("文件创建失败或文件已存在",5000)
    end
else
    dialog("文件夹创建失败或文件夹已存在",5000)
end

注意事项

  • 如果文件(夹)已存在,不会再次进行创建,返回值为 false。

函数:file.readString 读文件返回字符串

函数名称:读文件返回字符串

函数功能:读文件操作,读取文件内容,返回全部内容的 string

函数方法

str = file.readString (path,encode)

参数类型必填说明
pathstring需要读取的文件路径
encodestring编码格式,不写默认为 utf-8
返回值类型说明
strstring文件内容

函数用例

path1 = "/sdcard/LuaBox/Projects/测试/"
path2 = "/sdcard/LuaBox/Projects/测试/main.lua"
--创建文件夹
flag1 = file.new(path1)
mSleep(5000)
--创建文件
flag2 = file.new(path2)
str1 = "dialog(11)"
if  flag1 and flag2 then
    dialog("文件夹及文件创建成功",5000)
    --写入文件内容
    file.writeString(path2,str1)
    mSleep(2000)
    str2 = file.readString (path2,"utf-8")
    dialog("文件写入成功".."\r\n".."文件内容:"..""..str2,5000)
else
    dialog("文件(夹)创建失败或者文件(夹)已存在",5000)
end

注意事项

函数:file.writeString 保存字符串到文件

函数名称:保存字符串到文件

函数功能: 将字符串 string 内容存入文件

函数方法

str = file.writeString (path,str,encode)

参数类型必填说明
pathstring需要写入的文件路径
strstring需要写入的文件内容
encodestring编码格式,不写默认为 utf-8

函数用例

path1 = "/sdcard/LuaBox/Projects/测试/"
path2 = "/sdcard/LuaBox/Projects/测试/main.lua"
--创建文件夹
flag1 = file.new(path1)
mSleep(5000)
--创建文件
flag2 = file.new(path2)
str1 = "dialog(11)"
if  flag1 and flag2 then
    dialog("文件夹及文件创建成功",5000)
    --写入文件内容
    file.writeString(path2,str1)
    mSleep(2000)
    str2 = file.readString (path2,"utf-8")
    dialog("文件写入成功".."\r\n".."文件内容:"..""..str2,5000)
else
    dialog("文件(夹)创建失败或者文件(夹)已存在",5000)
end

注意事项

  • 文件不存在会创建文件再写入内容

  • 需要保证目录存在,否则会写入失败

函数:file.rename 重命名文件

函数名称:重命名文件

函数功能: 修改文件名称

函数方法

flag = file.writeString (path,name)

参数类型必填说明
pathstring需要修改的文件路径
strstring修改后的文件名称
返回值类型说明
flagbooleantrue - 修改成功,false - 修改失败

函数用例

path = "/sdcard/LuaBox/Projects/123/11.lua"
--判断文件是否存在
flag1 = file.isExist(path)
if  flag1 then
    --修改文件名称
    flag2 = file.rename(path,"22.lua")
    if  flag2 then
        dialog("修改成功",5000)
    else
        dialog("修改失败",5000)
    end
else
    dialog("文件不存在",5000)
end

注意事项

函数:file.copy 复制文件

函数名称:复制文件

函数功能: 复制文件

函数方法

flag = file.copy (oldpath,newpath)

参数类型必填说明
oldpathstring待复制文件的路径
newpathstring要复制到的文件路径,注意先判断是否有重名文件或文件夹。
返回值类型说明
flagbooleantrue - 复制成功,false - 复制失败

函数用例

--待复制文件的路径
oldpath = "/sdcard/LuaBox/Projects/1/error.log"
--要复制到的文件夹
newpath = "/sdcard/LuaBox/Projects/测试/"
--判断文件是否存在
flag1 = file.isExist(oldpath)
flag2 = file.isExist(newpath)
if  flag1 and flag2 then
      flag3=file.copy(oldpath,newpath.."1.log")
    if  flag3 then
        dialog("复制成功",5000)
    else
        dialog("复制失败",5000)
    end
else
    dialog("文件(夹)不存在",5000)
end

注意事项

  • 待复制和要复制到的文件路径必须带文件名,文件名和扩展名可修改。

函数:file.move 移动文件

函数名称:移动文件

函数功能:移动文件到新的目录下

函数方法

flag = file.move(oldpath,newpath)

参数类型必填说明
oldpathstring待移动文件的路径
newpathstring要移动到的文件路径,注意先判断是否有重名文件或文件夹。
返回值类型说明
flagbooleantrue - 移动成功,false - 移动失败

函数用例

--待移动文件的路径
oldpath = "/sdcard/LuaBox/Projects/1/error.log"
--要移动到的文件夹
newpath = "/sdcard/LuaBox/Projects/测试/"
--判断文件是否存在
flag1 = file.isExist(oldpath)
flag2 = file.isExist(newpath)
if  flag1 and flag2 then
      flag3=file.copy(oldpath,newpath.."error.log")
    if  flag3 then
        dialog("移动成功",5000)
    else
        dialog("移动失败",5000)
    end
else
    dialog("文件(夹)不存在",5000)
end

注意事项

  • 待移动和要移动到的文件路径必须带文件名,文件名和扩展名可修改。

函数:file.del 删除文件

函数名称:删除文件

函数功能:删除目录下的文件

函数方法

flag = file.del(path)

参数类型必填说明
oldpathstring待删除文件的路径
返回值类型说明
flagbooleantrue - 删除成功,false - 删除失败

函数用例

--待删除文件的路径
path = "/sdcard/LuaBox/Projects/测试/error.log"
--判断文件是否存在
flag1 = file.isExist(path)
if  flag1 then
    --删除文件
    flag2 = file.del(path)
    if  flag2 then
        dialog("删除成功",5000)
    else
        dialog("删除失败",5000)
    end
else
    dialog("文件不存在",5000)
end

函数:file.delFolder 删除文件夹

函数名称:删除文件夹

函数功能:删除目录下的文件夹

函数方法

flag = file.delFolderl(path)

参数类型必填说明
oldpathstring待删除文件夹的路径
返回值类型说明
flagbooleantrue - 删除成功,false - 删除失败

函数用例

--待删除文件夹的路径
path = "/sdcard/LuaBox/Projects/123/"
--判断文件夹是否存在
flag1 = file.isExist(path)
if  flag1 then
    --删除夹文件
    flag2 = file.delFolder(path)
    if  flag2 then
        dialog("删除成功",5000)
    else
        dialog("删除失败",5000)
    end
else
    dialog("文件夹不存在",5000)
end

函数:file.getSDCardPath 获取 SD 卡路径

函数名称:获取 SD 卡路径

函数功能:获取 SD 卡路径

函数方法

path = file.getSDCardPath()

返回值类型说明
pathstringSD 卡路径

函数用例

path = file.getSDCardPath()
dialog(path,5000)

图片函数

函数:image.crop 裁剪图片

函数名称:裁剪图片

函数功能: 从图片对象截取部分新建拷贝图片对象

函数方法

img = image.crop(img1,x1,y1,x2,y2)

参数类型必填说明
img1userdata需要操作的图片对象
x1number截取图片对象左上角的横坐标
y1number截取图片对象左上角的纵坐标
x2number截取图片对象右下角的横坐标
y2number截取图片对象右下角的横坐标
返回值类型说明
imguserdata/nil裁剪后的图片对象,失败返回 nil

函数用例

path = "/sdcard/LuaBox/Projects/1/1.png"
flag = file.isExist(path)
if  flag then
    oldimg,msg = image.load(path)
    if oldimg ~= nil then
        newimg = image.crop(oldimg,0,0,100,100)
        if  newimg ~=nil then
            dialog("裁剪成功",5000)
        else
            dialog("裁剪失败",5000)
        end
    else
        dialog("转换失败:"..msg,5000)
    end
else
    dialog("图片不存在",5000)
end

函数:image.findImage 图中找图

函数功能:在图片指定区域寻找另一张图像是否匹配

函数方法

x,y = image.findImage(img1,img2,deviation)

参数类型必填说明
img1userdata需要操作的图片对象
img2userdata将要寻找的图片的图片对象
deviationnumber允许偏差范围,0 代表不允许存在偏差即完全匹配,
数字越大越容易找到,但准确度也会随之降低,最高值为 40000000
返回值类型说明
x,ynumber找到的图片的左上角顶点坐标,如未找到则返回 -1,-1

函数用例

img1 = image.snapshot()
if  img1 ~= nil then
    img2= image.crop(img1,10, 10, 100, 100)
    x,y = image.findImage(img1,img2)
    if x~=-1 and x~=-1 then
        dialog("x:"..x.."\r\n".."y:"..y.."\r\n",5000)
    else
        dialog("未找到",5000)
    end
else
    dialog("截屏失败",5000)
end

注意事项

函数:image.findImageInRegion 误差找图

函数功能:在指定区域中,寻找指定的图案,返回其左上角顶点坐标

引擎版本:仅支持 v1.0.3 及其以上版本

函数方法

x,y = image.findImage(path,x1,y1,x2,y2,deviation)

参数类型必填说明
pathuserdata将要寻找的图片文件名
x1number找图区域左上角顶点屏幕横坐标
y1number找图区域左上角顶点屏幕纵坐标
x2number找图区域右下角顶点屏幕横坐标
y2number找图区域右下角顶点屏幕纵坐标
deviationnumber相似度,范围:0 - 100,不写默认为 90,数字越大越不容易找到
返回值类型说明
x,ynumber找到的图片的左上角顶点坐标,如未找到则返回 -1,-1

函数用例

--全屏截图
img1 = image.snapshot()
path = "/sdcard/LuaBox/Projects/ceshi.png"
if  img1 ~= nil then
    --裁剪
    img2=image.crop(img1,10, 10, 100, 100)
    if img2 then
        image.save(img2,path)
        mSleep(2000)
        --判断裁剪图片是否存在
        flag = file.isExist(path)
        if  flag then
            x,y = image.findImageInRegion(path,0,0,110,110,100)
            if x~=-1 and x~=-1 then
                toast("x:"..x.."\r\n".."y:"..y,5)
                mSleep(2000)
            else
                toast("未找到",5)
                mSleep(2000)
            end
        else
          toast("保存文件失败,文件不存在",5)
          mSleep(2000)
        end
    else
        toast("裁剪失败",5)
        mSleep(2000)
    end
else
    toast("截屏失败",5)
    mSleep(2000)
end

函数:image.getColorRGB 获取图片对象某点 RGB 颜色

函数名称:获取图片对象指定坐标点的颜色

函数功能: 获取图片对象指定坐标点的颜色

函数方法

color = image.getColor(img,x,y)

参数类型必填说明
imguserdata需要操作的图片对象
xnumber将获取颜色值的屏幕横坐标
ynumber将获取颜色值的屏幕纵坐标
返回值类型说明
r,g,bnumber该点颜色的 R,G,B 值,十进制颜色值

函数用例

path = "/sdcard/LuaBox/Projects/1/1.png"
flag = file.isExist(path)
if  flag then
    img= image.load(path)
    if img ~= nil then
        r,g,b = image.getColorRGB(img,20,20)
      --转成十六进制
       dialog(string.format("%#x",r)..string.format("%x",g)..string.format("%x",b),5000)
    else
        dialog("转换失败",5000)
    end
else
    dialog("图片不存在",5000)
end

函数:image.load 从文件创建图片

函数功能: 将图片转成图片对象

函数方法

img = image.load(path)

参数类型必填说明
pathstring图片路径
返回值类型说明
imgusedata/nil图片对象,失败显示空

函数用例

path = "/sdcard/LuaBox/Projects/1/1.png"
flag = file.isExist(path)
if  flag then
    img= image.load(path)
    if img ~= nil then
        dialog("转换成功",5000)
    else
        dialog("转换失败",5000)
    end
else
    dialog("图片不存在",5000)
end

函数:image.save 保存图片

函数名称:保存图片

函数功能: 将图片对象转成图片

函数方法

image.save(img,path,quality)

参数类型必填说明
imguserdata图片对象
pathstring要保存的图片路径和文件名,保存的路径必须已存在,不存在不会自动创建
qualityuserdata图片质量,仅对 jpg 格式有效,参数范围:0.1 - 1

函数用例

path = "/sdcard/LuaBox/Projects/2/1.png"
flag = file.isExist(path)
if  flag then
    img,msg = image.load(path)
    if img ~= nil then
        path1 = "/sdcard/LuaBox/Projects/1.png"
        image.save(img,path1)
    else
        dialog("转换失败",5000)
    end
else
    dialog("图片不存在",5000)
end

函数:image.setColor 设置图片色值

函数功能:设置图片对象指定坐标点的颜色值

函数方法

newimg = image.setColor(oldimg,x,y,color)

参数类型必填说明
oldimguserdata需要操作的图片对象
xnumber需要设置颜色值的图片对象的横坐标
ynumber需要设置颜色值的图片对象的纵坐标
colornumber需要设置的十六进制颜色值
返回值类型说明
newimguserdata/nil设置后的图片对象,,失败返回 nil

函数用例

path = "/sdcard/LuaBox/Projects/1/1.png"
flag = file.isExist(path)
if  flag then
    img,msg = image.load(path)
    if img ~= nil then
        --20,20 点颜色值设置为 0xff00ff
        newimg = image.setColor(img,20,20,0xff00ff)
        if newimg ~= nil then 
            dialog("成功")
            --获取颜色值
            color = image.getColor(newimg,20,20)
            --转成十进制
            dialog(string.format("20,20 颜色值为:0x%X",color),5000)
            dialog(color)
        else
            dialog("失败")
        end
    else
        dialog("转换失败:"..msg,5000)
    end
else
    dialog("图片不存在",5000)
end

函数:image.size 获取图片对象尺寸

函数名称:获取图片对象的宽高

函数功能: 获取图片对象的宽度和高度

函数方法

w,h = image.size(img)

参数类型必填说明
imguserdata图片对象
返回值类型说明
wnumber图片对象的宽度
hnumber图片对象的高度

函数用例

--全屏截图
img = image.snapshot()
if type(img) == "userdata" then 
        w,h=image.size(img)
        dialog("w:"..w.."\r\n".."h:"..h,5000)
else
    dialog("截屏失败",5000)
end

函数:image.snapshot 截取屏幕

函数功能:全屏截图返回图片对象

函数方法

img = image.snapshot()

返回值类型说明
imguserdata/nil截取后的图片对象,失败返回 nil

函数用例

img = image.snapshot()
if img ~= nil then
    dialog("成功",5000)
else
    dialog("失败",5000)
end

模拟按键

函数:keycode.back 模拟按下返回键

函数名称:模拟按下返回键

函数功能: 点击一次返回键

函数方法

keycode.back()

注意事项

  • 部分设备可能会出现无效的问题,已知模拟器调用此命令可能会失效。

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:keycode.home 模拟按下 home 键

函数名称:模拟按下 home 键

函数功能: 点击一次 home 键

函数方法

keycode.home()

注意事项

  • 部分设备可能会出现无效的问题,已知模拟器调用此命令可能会失效。

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:keycode.notification 拉出通知栏

函数名称:拉出通知栏

函数功能: 下滑拉出通知栏

函数方法

keycode.notification()

注意事项

  • 部分设备可能会出现无效的问题,已知模拟器调用此命令可能会失效。

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:keycode.quickSetting 显示快速设置

函数名称:显示快速设置

函数功能: 下滑显示快速设置

函数方法

keycode.quickSetting()

注意事项

  • 部分设备可能会出现无效的问题,已知模拟器调用此命令可能会失效。

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:keycode.recent 打开最近任务

函数名称:打开最近任务

函数功能: 下滑显示最近任务

函数方法

keycode.recent()

注意事项

  • 部分设备可能会出现无效的问题,已知模拟器调用此命令可能会失效。

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:keycode.splitScreen 设备分屏

函数名称:设备分屏

函数功能: 分屏显示画面

函数方法

keycode.splitScreen()

注意事项

  • 需要手机有分屏功能使用此函数才能生效。

  • 部分设备可能会出现无效的问题,已知模拟器调用此命令可能会失效。

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:keycode.power 弹出电源键菜单

函数名称:弹出电源键菜单

函数功能: 显示电源键菜单

函数方法

keycode.power()

注意事项

  • 部分设备可能会出现无效的问题,已知模拟器调用此命令可能会失效。

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

设备函数

函数:device.writePasteboard 写入剪贴板

函数名称:写入剪贴板

函数功能:对系统剪贴板进行写入操作

函数方法

device.writePasteboard(str);

参数类型必填说明
strstring写入剪贴板字符串

函数用例

str1 = "测试写入剪贴板"
device.writePasteboard(str1)
--写入剪贴板后推荐加延时后再读取剪贴板,否则可能会出现读取错误的问题
mSleep(1000)
--读出剪贴板内容
str = device.readPasteboard();    
--延迟 0.5mSleep(500);     
dialog(str,5000);

注意事项

  • 该函数将覆盖系统剪贴板,如有重要数据储存在剪贴板请及时备份。

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.readPasteboard 读取剪贴板

函数名称:读取剪贴板

函数功能:对系统剪贴板进行读取操作

函数方法

str = device.readPasteboard()

返回值类型说明
strstring剪贴板的内容

函数示例

写入并读取剪贴板内容

str1 = "测试写入剪贴板"
device.writePasteboard(str1)
--写入剪贴板后推荐加延时后再读取剪贴板,否则可能会出现读取错误的问题
mSleep(1000)
--读出剪贴板内容
str = device.readPasteboard();    
--延迟 0.5mSleep(500);     
dialog(str,5000);

注意事项

  • 该函数将覆盖系统剪贴板,如有重要数据储存在剪贴板请及时备份。

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.getOSVer 获取系统版本号

函数功能:获取系统版本号

函数方法

sysver = device.getOSVer()

返回值类型说明
sysverstring返回系统版本号如:7.0

函数用例

sysver = device.getOSVer();    --获取系统版本
dialog(sysver,5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.getLuaBoxVer 获得 LuaBox 版本号

函数功能:获得 LuaBox 当前版本

函数方法

version = device.getLuaBoxVer()

返回值类型说明
versionstring返回获得 LuaBox 当前版本如:1.0

函数用例

version = device.getLuaBoxVer()
dialog(version,5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.getTotalMemory 获得设备内存总量

函数功能:获得设备内存总量

函数方法

total = device.getTotalMemory()

返回值类型说明
totalstring设备内存总量,单位:字节

函数用例

total =  device.getTotalMemory()
dialog(total,5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.getFreeMemory 获得设备空闲内存

函数功能:获得设备内存总量

函数方法

free = device.getFreeMemory()

返回值类型说明
freestring设备空闲内存,单位:字节

函数用例

free = device.getFreeMemory()
dialog(free,5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.isWake 判断屏幕是否亮屏

函数功能:判断屏幕是否亮屏

函数方法

bool = device.isWake()

返回值类型说明
boolstringtrue - 屏幕亮屏,false - 屏幕黑屏

函数用例

bool = device.isWake()
if bool then
    toast("屏幕亮屏",2)
    mSleep(3000)
else
    toast("屏幕黑屏",2)
    mSleep(3000)
end

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.wake 唤醒屏幕

函数名称:唤醒屏幕

函数功能:唤醒设备 CPU、屏幕等,可以用来点亮屏幕

函数方法

device.wake()

函数用例

bool = device.isWake()
if bool then
    toast("屏幕亮屏",2)
    mSleep(3000)
else
    toast("屏幕黑屏",2)
    mSleep(3000)
    --唤醒屏幕
    device.wake()
end

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.keepWake 保持屏幕常亮

函数名称:保持屏幕常亮

函数功能:保持屏幕常亮

函数方法

device.wake()

函数用例

device.keepWake()

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.setAlarmVolume 设置闹钟音量

函数名称:设置闹钟音量

函数功能:设置闹钟音量大小

函数方法

device.setAlarmVolume(vol)

参数类型必填说明
volnumber闹钟音量,范围 0~100

函数用例

--不同设备范围可能不同
device.setAlarmVolume(7)
vol = device.getAlarmVolume()
dialog(vol,5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.getAlarmVolume 获取闹钟音量

函数名称:获取闹钟音量

函数功能:获取闹钟音量大小

函数方法

vol = device.getAlarmVolume()

返回值类型说明
volnumber闹钟音量,范围 0~100

函数用例

--不同设备范围可能不同
device.setAlarmVolume(7)
vol = device.getAlarmVolume()
dialog(vol,5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.batteryQuantity 获取设备剩余电量

函数名称:获取设备剩余电量

函数功能:获取设备剩余电量大小

函数方法

level = device.batteryQuantity()

返回值类型说明
levelnumber当前设备剩余电量,范围:0 - 100

函数用例

level = device.batteryQuantity()
dialog(level,5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.betteryCharging 获取设备充电状态

函数名称:获取设备充电状态

函数功能: 用于判断当前设备充电状态

函数方法

charging = device.betteryCharging()

返回值类型说明
chargingbooleantrue - 充电中,false - 未充电

函数用例

charging  = device.betteryCharging()
if   charging then
    dialog("充电中",5000)
else
    dialog("未充电",5000)
end

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.getMediaVolume 获取媒体音量最大值

函数名称:获取媒体音量最大值

函数功能: 获取媒体音量最大值

函数方法

maxvol = device.getMediaVolume()

返回值类型说明
maxvolnumber媒体音量最大值

函数用例

maxvol = device.getMediaVolume()
dialog(maxvol,5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.setMediaVolume 设置媒体音量

函数名称:设置媒体音量

函数功能: 设置媒体音量大小

函数方法

device.setMediaVolume(vol)

参数类型必填说明
volnumber要设置的设备音量

函数用例

device.setMediaVolume(7)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.getNotificationVolume 获取通知音量最大值

函数名称:获取通知音量最大值

函数功能: 获取通知音量最大值

函数方法

vol = device.getNotificationVolume()

返回值类型说明
volnumber通知音量最大值

函数用例

--获取通知音最大音量
maxvol =  device.getNotificationVolume()
dialog(maxvol,5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.setNotificationVolume 设置通知音量

函数名称:设置通知音量值

函数功能: 设置通知音量大小

函数方法

device.setNotificationVolume(vol)

参数类型必填说明
volnumber通知音量值

函数用例

device.setNotificationVolume(5)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.vibrator 手机震动

函数名称: 手机振动,震动

函数功能: 使手机振动一次

函数方法

device.vibrator(time)

参数类型必填说明
timenumber震动时间,单位毫秒

函数用例

for i=1,5 do
    device.vibrator(1000)
    mSleep(1000)
end

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:device.cancelVibration 停止震动

函数名称: 停止震动

函数功能: 停止震动

函数方法

device.cancelVibration()

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

脚本控制

函数:runtime.exit 停止脚本

函数名称:停止脚本

函数功能:停止脚本

函数方法

runtime.exit()

函数用例

dialog("开始运行",5000)
runtime.exit()
dialog("运行不到这里",5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:runtime.restart 重载脚本

函数名称:重新加载运行脚本

函数功能:重新加载运行脚本

函数方法

runtime.restart()

函数用例

dialog("开始运行",3000)
mSleep(5000)
runtime.restart()
dialog("运行不到这里",5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

媒体

函数:runtime.restart 重载脚本

函数名称:重新加载运行脚本

函数功能:重新加载运行脚本

函数方法

runtime.restart()

函数用例

dialog("开始运行",3000)
mSleep(5000)
runtime.restart()
dialog("运行不到这里",5000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:media.jump 调整音频播放进度

函数名称:调整音频播放进度

函数功能: 跳转到指定的音频播放位置

函数方法

media.jump(time)

参数类型必填说明
timenumber要跳转的播放进度时间,单位:毫秒

函数用例

media.playAudio("/mnt/sdcard/LuaBox/Projects/1/1.mp3",5,true)
--把音乐播放到 1 分钟的位置
media.jump(60*1000)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:media.pause 暂停音频播放

函数名称:暂停音频播放

函数功能: 暂停音频播放

函数方法

media.pause()

函数用例

media.playAudio("/mnt/sdcard/LuaBox/Projects/1/1.mp3",5,true)
--把音乐播放到 1 分钟的位置
media.jump(60*1000)
mSleep(2000)
-- 暂停音频播放
media.pause()

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:media.isPlaying 获取音频播放状态

函数名称:获取音频播放状态

函数功能: 获取音频是否在播放

函数方法

flag = media.isPlaying()

返回值类型说明
flagbooleantrue - 正在播放音频,false - 未播放

函数用例

media.playAudio("/mnt/sdcard/LuaBox/Projects/1/1.mp3",5,true)
flag = media.isPlaying()
if  flag then
    dialog("正在播放中",5000)
else
    dialog("已停止播放或者未播放",5000)
end

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:media.stop 停止播放音频

函数名称:停止播放音频

函数功能: 停止播放音频

函数方法

media.stop()

返回值类型说明
flagbooleantrue - 正在播放音频,false - 未播放

函数用例

media.playAudio("/sdcard/TouchSprite/res/1.mp3")
mSleep(2000)
media.stop()
flag = media.isPlaying()
if  flag then
    dialog("正在播放中",5000)
else
    dialog("已停止播放或者未播放",5000)
end

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:media.getMusicDuration 获取播放音乐的总时长

函数名称:获取播放音乐的总时长

函数功能: 获取当前播放音乐的总时长

函数方法

duration = media.getMusicDuration()

返回值类型说明
durationnumber当前播放音乐的总时长,单位:毫秒,无音频在播放返回 0

函数用例

media.playAudio("/mnt/sdcard/LuaBox/Projects/1/1.mp3",5,true)
mSleep(2000)
flag = media.isPlaying()
if flag  then
    level = media.getMusicCurrentPosition()
    dialog(level,5000)
else
    dialog("无音频在播放",5000)
end

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:media.getMusicCurrentPosition 获取当前音频播放进度

函数名称:获取当前音频播放进度

函数功能: 获取当前音频播放进度大小

函数方法

level= media.getMusicCurrentPosition()

返回值类型说明
levelnumber获取当前音频播放进度,单位:毫秒,无音频在播放返回 0

函数用例

media.playAudio("/mnt/sdcard/LuaBox/Projects/1/1.mp3",5,true)
mSleep(2000)
flag = media.isPlaying()
if flag  then
    level = media.getMusicCurrentPosition()
    dialog(level,5000)
else
    dialog("无音频在播放",5000)
end

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

函数:media.addToLib 添加音频文件到媒体库

函数名称:添加音频文件到媒体库

函数功能: 添加音频文件到媒体库

函数方法

media.addToLib(path)

参数类型必填说明
pathnumber需要添加到媒体库的文件

函数用例

path = "/sdcard/TouchSprite/res/1.mp3"
media.addToLib(path)

注意事项

  • 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值