请问appapp inventorr 改变屏幕后,上一屏的计时器会继续计时吗

iOS锁屏或者后台计时器定时解决方法 - 简书
iOS锁屏或者后台计时器定时解决方法
我们知道,当程序进入后台时,计时器就会暂时停止,当重新进入程序时,计时器又会重新开始,有时候,我们需要在程序进入后台时,计时器依然能够计时,所以,就想到了一种解决方案,利用进入后台和前台的时间差来让计时器完美计时。
首先在app delegate.m中有几个方法,这里我们用的是一下2个方法
//当程序进入后台的时候调用
- (void)applicationWillResignActive:(UIApplication *)
//当程序进入前台的时候调用
- (void)applicationDidBecomeActive:(UIApplication *)
所以当程序进入后台的时候,我们可以注册一个通知,这个通知用来告诉对应的VC“程序已经进入后台,记录当前的系统时间”,
- (void)applicationWillResignActive:(UIApplication *)application{
[[NSNotificationCenter defaultCenter] postNotificationName:@"程序进入后台" object:nil];
同样在程序再次进入前台的时候记录当前的时间
- (void)applicationDidBecomeActive:(UIApplication *)application{
[[NSNotificationCenter defaultCenter] postNotificationName:@"程序进入前台" object:nil];
在对应的VC.m中接收通知,先声明一个全局的变量,NSDate * goBackgroundD
-(void)viewWillAppear:(BOOL)animated{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appGoBackgroud) name:@"程序进入后台" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appGoForegroud) name:@"程序进入前台" object:nil];
- (void)appGoBackgroud{
goBackgroundDate = [NSDate date];
- (void)appGoForegroud{
NSTimeInterval
timeGone = [[NSDate date] timeIntervalSinceDate:goBackgroundDate];
time = timeGone +
- (void)dealloc{
[[NSNotificationCenter defaultCenter]removeObserver:self];
以上就为后台运行计时器的解决方法,time为你自己定义的时间变量,timeGone为时间间隔。也可以参考原文:
我只是在原作者的基础上,动手实现了一下。
一个帅字贯串一生APPinventor GPS定位程序说明_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
APPinventor GPS定位程序说明
&&关于如何在APPinventor平台下面做手机定位的程序
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢只需一步,快速开始
后使用快捷导航没有帐号?
查看: 5179|回复: 25
从零开始写AIX(appinventor的Extension拓展组件)
主题帖子积分
本帖最后由 colintree 于
18:56 编辑
跟大家说个事我已经把所有我的拓展组件的源代码,上传到
如果有需要参考的朋友,快去看看吧
或者,有意愿加入这个组的朋友,也要记得联系我喔
首先Mark一下,,我是树树,也可以叫我ColinTree(虽然拗口的很)
是个高中生,,三年前(差不多13年吧)开始玩App inventor,有啥不懂的,可以来问我,,
毕竟,这个年份,怎么也算个老司机了吧hhh
找我的方式有,,
QQ: (这年代不应该玩微信么)
邮箱:QQ邮箱()
个人网站留言(不过我偶尔才看看后台,,)
提问(一旦有任何提问,我的邮箱就会收到提示的呢)
自6月15号Appinventor开放更新NB149之后,App inventor引进了一个自由度非常高的内容:Extension(拓展组件)Appinventor 规定在App inventor本身的基础上,可以加入一些辅助性的不可视组件,但是权限放的相当的开!
于是乎,很多人都开始感兴趣,但是却不知如何下手写
在本人的再三研究之后,总结了一系列的教程,将一直在这个帖子更新(好吧停了有一阵子了)
本文首发于
以及 作者的个人网站 .
作为一个苦逼的高中生,平时研究和写这些教程并不容易,就希望大家多支持,给我提供更多动¥力!谢谢!
作者微信: 支付宝:以及
主题帖子积分
新手上路, 积分 38, 距离下一级还需 12 积分
新手上路, 积分 38, 距离下一级还需 12 积分
输入指令:
cd c:/users/你登陆电脑使用的用户名/appinventor-sources/appinventor
运行这一步出错,
BUILD FAILED
E:\appinventor-sources\appinventor\build.xml:16: The following error occurred while executing th& && && && & is line:
E:\appinventor-sources\appinventor\build-common.xml:284: The following error occurred while exec& && && && & uting this line:
E:\appinventor-sources\appinventor\blocklyeditor\build.xml:63: Java returned: 1
前面的步骤都没有问题,这步有问题,求救!!!
主题帖子积分
1&&准备1.1& && & 下载写Appinventor拓展文件(.aix)需要的工具有:1.1.1& &GitGit是一个分布式版本控制软件,这里我们将用他来下载appinventor的源代码以及执行编译指令下载地址:()1.1.2& & AntApache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。Appinventor已经将他的源码编译过程全部浓缩到一个指令文件里,只需要我们使用Ant将其执行即可下载地址:()1.1.3& & Google app engine事实上,GAE客户端是一个备用选项,GAE客户端可以将Ant编译Appinventor生成的结果本地运行。这个是在官方文档里建议使用的,但是就个人来说,作者我并没有用这个方法,而是直接生成aix然后在网页上一次次的调试。更何况,国内Google还是不稳定的,所以本文还是不讲解了1.1.4& & Java不意外的,写Java代码还得请Java本人。作者在测试的时候,发现最新的Java8似乎并不能用……所以我们要卸载所有Java8的Jre或者Jdk,然后安装最新的Java7版本。下载地址:Jre:Jdk:1.1.5& & JeditJedit是作者推荐用来编辑Java源代码的一个IDE下载地址:()
有朋友反映有些软件下载不了,于是我把提到的软件统一打包到了(密码4rns)←如果显示链接不存在,点击屏幕右上方的红色叉叉即可里面已经分类好32位以及64位只需要按照电脑实际情况下载即可
主题帖子积分
1.2& && &&&安装、配置(按顺序)1.2.1.& & Git双击安装下载好的安装包其中建议如图选择:(添加快捷方式到桌面)其他选项保持默认1.2.2.& & Java按默认路径安装Jre按默认路径安装Jdk右击“计算机”,点击“属性”,点击弹出界面的左部分的“高级系统设置”,选择“高级”选项卡,点击下部的“环境变量”在“系统变量”中,设置属性JAVA_HOME、CLASSPATH、Path(不区分大小写),若已存在则点击“编辑”,不存在则点击“新建” 1)& & JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径/Java/jdk1.7.0_79,此路径下包括lib,bin,jre等文件夹2)& & Path使得系统可以在任何路径下识别java命令,这里,要注意下,path应该是本来就存在的,就不要新建了,找到path,点击“编辑”;在值的最前面加上下面的语句即可。如果覆盖了path变量,将导致的cmd下有些基本的命令会找不到。 %JAVA_HOME%/%JAVA_HOME%/jre/3)& & CLASSPATH为java加载类(classor lib)路径,只有类在classpath中,java命令才能识别,设为:.;%JAVA_HOME%/lib/dt.%JAVA_HOME%/lib/tools.jar(要加.表示当前路径) %JAVA_HOME%就是引用前面指定的JAVA_HOME;保持环境变量窗口不要关闭,一会Ant配置还要用1.2.3.& & Ant解压下载好的zip压缩包,将其拷贝至一个你不会轻易误删的地方进入环境变量,设置:1)& & 类似JAVA,新建ANT_HOME,填入Ant的解压目录,如E:\Ant\apache-ant-1.9.1,此目录下有bin, lib等子目录2)& & 在Path加入 %ANT_HOME%\bin3)& & 在CLASSPATH加入 %ANT_HOME%\lib1.2.4.& & Jedit双击安装Jedit(如果有需要可以去装个汉化补丁)1.2.5.& & 检验至此,你应该已经安装完毕了,可以以下方法惊醒检验:win键+R,输入cmd,运行输入java -version并回车,若显示版本信息,则Java配置成功输入ant并回车,若显示: Buildfile: build.xml does not exist!Build failed则说明Ant配置成功
若两项都配置成功,则恭喜你,你已经拥有了开始的条件了
1.3& && & 下载源代码这个时候,就是时候把Appinventor的源代码从Git的代码仓库下载下来了。打开Git在桌面生成的链接:Git Bash输入以下指令并回车:git clone /mit-cml/appinventor-sources.git复制代码于是乎,窗口里会出现百分比,包大小,以及网速之类的信息开始下载后,我们可以去休息一下眼睛,需要做的只是等待,直至下载完成.作者个人建议在Git Bash的图标旁边新建一个文本,存入这么一行代码:cd c:/users/你登陆电脑使用的用户名/appinventor-sources/appinventor(win7以后系统使用,XP未测试)(如果是用下面的链接下载的话,把路径名改为相应的解压缩包后的路径,如解压到d:/则为cd d:/appinventor-sources/appinventor)(验证路径是否正确只需把整行代码输入到Git Bash并查看结果,如果发现路径后面有&master&字样即为成功,如图)而这一行代码以后每次打开Git进行编译的时候要用到的。如果使用Git bash指令下载失败,可以在(密码4rns)里下载我提供的副本
本帖子中包含更多资源
才可以下载或查看,没有帐号?
主题帖子积分
新手上路, 积分 4, 距离下一级还需 46 积分
新手上路, 积分 4, 距离下一级还需 46 积分
顶,学习基础条件是什么,是否要会android传统编程
主题帖子积分
顶,学习基础条件是什么,是否要会android传统编程
感谢老师顶帖!
是的,需要一些JAVA基础,但是我接下来会一直更新,一步一步教重点部分,把AI的预设代码都讲解好
主题帖子积分
本帖最后由 colintree 于
09:27 编辑
2.&&开始编写AIX的源代码2.1& && & 尝试编译Appinventor在配置完我们的开发环境之后,我们可以尝试编译一下Appinventor的源代码,以保证整个源代码的正确性。打开Git Bash,输入指令:cd c:/users/你登陆电脑使用的用户名/appinventor-sources/appinventorant输入完成,回车后,窗口上会开始有大量的文字输出,我们需要做的就是等待。等到文字输出停止了,我们会看到在屏幕的倒数第五行左右会有结果提示,如果发现显示BUILD SUCCESSFUL,那么几句说明,整个下载下来的源代码是没有问题的。
2.2& && & 编译自己的第一个JAVA文件既然下载的源代码,是没有问题的,那就是时候开始写自己的JAVA文件啦。找到c:\users\你登陆电脑使用的用户名\appinventor-sources\appinventor\components\src\文件夹,按照你的包名新建文件夹比如,包名为cn.yzzyz.extensions则创建文件夹cn,在其中创建文件夹yzzyz,接着在里面创建extensions文件夹,并把已经准备好的预设代码(见附件)存入。
再接着,把这个预设代码文件的名字从”拓展组件名字.java”改成你要使用的组件名字+”.java” (名字以字母开头,可以包括大小写字母和数字)
紧跟着,用jEdit打开这个Java文件第一行,是包名,包名是一个类似于网址倒过来写的结构,比如我的网址是,包名就可以用cn.yzzyz.extensions当然,就算是你没有一个属于自己的网址,也是没问题的,包名要做的,仅仅是做一个属于你的标识,只要不与其他人一样即可
修改完包名,顺着文档将所有的中文“拓展组件名字” 同样都替换组件名字
接着找到最下面,会发现一段这样的代码:
&font size=&4&&/**
*
*/
//这三行是注释,记录自己写这个函数是为了做什么
@SimpleFunction(description = &Return Hello World!&)
//这一行表示,这是一个“简单函数”
public String Test(double a) {
//这是一个返回值为字符串,名字叫做“Test”,需要一个参数双精度小数a的函数
& & return &Hello Appinventor!&;
& & //返回一个字符串作为函数的结果,再逻辑设计中,调用这个函数,将会返回给上一个块的值
}
&/font&复制代码
你可以把return 后,双引号之间的字符串改成任何你想要的文字(但是不要出现&或者')
完成之后,打开Git Bash,定位到文件夹(cd c:\……),输入代码并回车:ant extensions(注意!之前这里写错了!sions里多了一个i,变成了,sioins。现已更正,感谢的提示)
直到编译完成现在的情况应该是BUILD SUCCESSFUL的情况所以这样子就可以得到一个aix文件,路径位于:c:\users\你登陆电脑使用的用户名\appinventor-sources\appinventor\components\build\extensions而这个文件的名字页应该是:包名+组件名
至此,你已经成功编译出属于你自己的一个aix文件了
本帖子中包含更多资源
才可以下载或查看,没有帐号?
主题帖子积分
因为每次都要在Git Bash输入定位文件夹(cd c:/...)和执行编译指令,实际上是挺讨厌的,也挺麻烦的
所以在这里教大家一个偷懒的方法:
新建一个文本文件,并把名字改成&编译extensions.sh&(如果修改不到后缀名,请)
右键,编辑
在文件中输入:
cd c:/users/用户名/appinventor-sources/appinventor
ant extensions
read复制代码
保存,关闭
以后每次需要编译java文件的时候就直接双击这个Shell 脚本,就会自动执行这中间的命令啦
注意,最后那一行代码&read&的功能是保持窗口,防止窗口在执行了前面两行代码之后就自动关闭
在窗口执行完编译指令之后,无论是BUILD SUCCESSFUL 还是 BUILD FAIL,都会停下来给你展示编译过程中的输出
直到您按一下回车键,窗口才会关闭
主题帖子积分
新手上路, 积分 12, 距离下一级还需 38 积分
新手上路, 积分 12, 距离下一级还需 38 积分
主题帖子积分
开学了,接下来可能比较忙,不能一天一更,我尽力写把!
高二还是挺忙的
主题帖子积分
2.3& && & 详细解析组件的定义2.3.1.& & 可能使用的变量种类在官方提供的文档中,给出了一个表格,列举了Appinventor中Java和Yail类型之间的对应关系:&&Java变量&&Yail变量&&(编译时使用)方案变量&&(运行时使用)参考翻译举例BooleanBooleanBoolean真假值按钮.启用StringTextString文本标签.文本IntShortLongFloatdoublenumberNumber数字标签.字体大小&&计时器.间隔Java.util.CalendarInstantInTimeJava.util.Calendar日历时间
Any Java typeanyAny Java type任何种类
ComponentcomponentComponent组件
YailListCollection&?&ListYail-list列表列表选择.元素蓝牙客户端.地址注意,在Appnventor中,全局变量没有固定的变量种类,任何运算都在适合的情况下才能进行。但是在Java中,YailList转换为Java的List或者数组的时候,是需要定义变量类型的,这个会在下面详细讲。2.3.2.& & BooleanBoolean(布尔)值是一种占很小空间的值,因为它只能为真或假,在任何语言中都是如此,非常好理解,如果启用为真,那么就是组件已经启用。但是有几点需要了解,布尔运算and在Java中用&&表示,or在Java中用||表示,not用!表示,不等于用!=表示,if中的等于用==表示(=是赋值)。2.3.3.& & String字符串String也非常好理解,就是App inventor中的文本(Text)。2.3.4.& & Int, Short, Long, Float, Double这五个好兄弟在App inventor里面统称为数字(Number),在Java中就没有这么简单了。Short, Int, Long是整数,其中-3)&= Short &= -1),-2,147,483,648(-2^31)&= Int &= 2,147,483,647(2^31–1)-9,223,372,036,854,775,808(-2^63)&= Long &= 9,223,372,036,854,775,807(2^63-1)Float和Double是浮点数(允许小数),其中:Float数据类型是单精度、32位、符合IEEE 754标准的浮点数,在储存大型浮点数组的时候可节省内存空间Double数据类型是双精度、64位、也是符合IEEE 754标准的浮点数就树苗我来说,我经常是用Double,虽然说浮点数“不适合用来表示精确的值”2.3.5.& & CalendarCalendar变量我还没怎么研究,但是我看到计时器(Clock)组件中才会用到这个变量,如果真的有需要,再说吧,最近实在太忙啦2.3.6.& & AnyAny又没给样例又没见到,我也不知道的呢2.3.7.& & Component组件Component,一个比较神奇的变量,理论上Java是不包含的,但是MIT厉害啊,直接就定义了Component变量,具体使用,其实在样例中已经展现出来了,这是作为定义Appinventor的组件用的(废话!)2.3.8.& & YailList嗯,重头戏YailList,也就是逻辑编辑中的列表ListYailList是App inventor定义的另一个变量。这个变量的使用频率实在太高,以至于这是一个绕不过去的坑。了解过更多语言的朋友会说,YailList是Java里的数组Array嘛?理论上是的,因为YailList在Java中可以转换为几个格式:&&1.& &&&对象数组“Object Array”,也就是不定义类型,仅仅把数据保存到一个数组中去。&&2.& &&&字符串数组String Array,专门以字符串形式储存列表中的内容。&&3.& &&&没了很棒是不是,只有两个需要思考的选项。接着,在YailList的定义文件中,我还找到了一些关于Java中YailList的用法:假设我们这里有一个YailList的名字是XXX&&1.& &&&列表长度List Length:&&(返回值类型为Int)XXX.size()&&2.& &&&获取索引值i指向的列表值:&&(返回值类型为Object)XXX.getObject(i)&&3.& &&&创建空列表:&&(返回值类型为YailList)YailList.makeEmptyList()&&4.& &&&转换索引值i指向的列表值为字符串:&&(返回值类型为String)XXX.getObject(i).toString()&&5.& &&&使一个对象转换为列表(举例:XXX的第i项列表值也是个列表)&&(返回值类型为YailList)(YailList) XXX.getObject(i)&&6.& &&&将对象列表转换为YailList&&(返回值类型为YailList)makeList(对象列表)&&7.& &&&将List变量转换为YailList&&(返回值类型为YailList)makeList(List值)&&8.& &&&将Collection变量转换为YailList&&(返回值类型为YailList)makeList(Collection值)&&9.& &&&将列表转换为JSON格式的字符串&&(返回值类型为String)XXX.toJSONString()&&10.&&将列表转换为数组&&(返回值类型为对象数组)XXX.toArray()&&11.&&将列表转换为字符串数组&&(返回值类型为字符串数组)XXX.toStringArray()&&12.&&将列表转换为字符串&&(返回值类型为String)XXX.toString()&&13.&&将列表元素转换为字符串(感觉和getItem(i).toString()有点像)我好像只见到在列表显示框ListView和列表选择框ListPicker里有用到&&(返回值类型为String)XXX.YailListElementToString(对象Object 元素)另外,我在谷歌上还找到了一些资料:说这个文件定义了更多的过程(我怎么没看到!!!)不管有没有(没时间验证,明天吧),我先贴出来:&&1.& &&&(返回void(空))addItem(String)&&2.& &&&(返回String) getItem(int 索引值)&&3.& &&&(返回Array) getItems()&&4.& &&&(返回String) getString(int 索引值)&&5.& &&&(返回Boolean) isListEmpty()&&6.& &&&(返回YailList) makeList(对象数组, int sortorder)(未知区别)&&7.& &&&(返回void(空))removeItem(int 索引值)&&8.& &&&(返回void(空))removeItem(String 移除的内容的值)&&9.& &&&(返回void(空)) replaceValue(int位置(应该是等于索引值), String 新值)2.3.9.& & 说明我现在每天都有很多事要做,抽空收集整理这些资料来分享真的挺辛苦,像这一篇讲解变量的,我瞄了一眼,(居然)有1600+字词,而且大部分都是手打所以,如果您觉得这些文字对您有帮助,您可以选择前往我的进行捐助您的每一笔捐助都会给我提供极大的动力!当然您也可以选择在我的网站上留言提建议,对此我感激不尽!凌晨2点,树苗appinventor开发震动按摩APP - QQ爹の博客
appinventor开发震动按摩APP
Aug 31,2016
read (2851)
文章转载请注明来源!
设计如图界面上,需要两个提示标签,两个按钮,两个滚动条;多媒体上需要一个音效播放器,一个计时器,一个对话框;布局上需要用到水平布局和垂直布局,具体怎么用简洁美观即可。为两个标签分别设置“震动间隔”和“震动时长”内容,红色字体,滚动条分别设置最大值和最小值,单位是毫秒。编程这个软件不是很复杂,所以编程也很简单。首先思考下计时器间隔,震动间隔事件和震动时长三者的关系。举个例子:如果我们想每隔1秒震动2秒,那么计时器间隔就是3秒,因为在震动的时候计时器也是工作的。所以编程:当点击“开始震动”按钮时,让计时器工作,发出提示文字,设置计时器间隔时间=“震动间隔”+“震动时长”;然后当计时器达到间隔时间时,设置振动器时长为滑块位置对应时间,然后让音效播放器发声;当点击“停止”按钮时,让计时器停止工作,发出提示,并且关闭音效播放器。成品APP下载:[震动机.apk]说明:此产品诞生原由,主要是削减无聊,界面制作思路,以及震动频率的要求都是来自群内基友。
支付宝打赏
扫描二维码,在手机上阅读!
<("您通过 百度 找到了我,厉害!","通知", {timeOut: 3000});
音乐加载中...

我要回帖

更多关于 app inventor 的文章

 

随机推荐