Android中通过system调用Am命令执行动作
在底层代码中看到这样一条语句:
system("/system/bin/sh -c \"am broadcast -a android.intent.action.AT_AIRPLANE_MODE --ez state true\"");
system 这是干什么的啊??
经google原来system是系统调用,执行一个系统命令。
这里system加上其参数的意思:
调用system,通过shell,执行可执行程序或者脚本am,
发送broadcast Action为:android.intent.action.AT_AIRPLANE_MODE 广播参数--ez 键值对 state true……
这样也可以啊,我原来以为android底层要主动和上层进行交互,就得通过socket等,原来这样也可以的,真是学习了。
1 system命令
system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed.
During execution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored.
system()函数调用/bin/sh来执行参数指定的命令,/bin/sh 一般是一个软连接,指向某个具体的shell,比如bash,-c选项是告诉shell从字符串command中读取命令;
在该command执行期间,SIGCHLD是被阻塞的,好比在说:hi,内核,这会不要给我送SIGCHLD信号,等我忙完再说;
在该command执行期间,SIGINT和SIGQUIT是被忽略的,意思是进程收到这两个信号后没有任何动作。
为了更好的理解system()函数返回值,需要了解其执行过程,实际上system()函数执行了三步操作:
a.fork一个子进程;
b.在子进程中调用exec函数去执行command;
c.在父进程中调用wait去等待子进程结束。
对于fork失败,system()函数返回-1。
如果exec执行成功,也即command顺利执行完毕,则返回command通过exit或return返回的值。
注意,command顺利执行不代表执行成功,比如command:"rm debuglog.txt",不管文件存不存在该command都顺利执行了
如果exec执行失败,也即command没有顺利执行,比如被信号中断,或者command命令根本不存在,system()函数返回127.
如果command为NULL,则system()函数返回非0值,一般为1.
具体可参考这篇文章:
http://my.oschina.net/renhc/blog/53580
am的代码实现在\frameworks\base\cmds\am\目录下:
\frameworks\base\cmds\am\am 这个就是放在system/bin/am:
base=/system
export CLASSPATH=$base/framework/am.jar
exec app_process $base/bin mands.am.Am "$@"
通过app_process创建执行mands.am.Am这样进程 $@传递所有参数给Am
\frameworks\base\cmds\am\src
\frameworks\base\cmds\am\Android.mk
将编译java层Am为一个am.jar包,下面看一下Am的支持的功能。
public static void main(String[] args) {
(new Am()).run(args);
} catch (IllegalArgumentException e) {
showUsage();
private void run(String[] args) throws Exception {
//获取ActivityManagerService实例
mAm = ActivityManagerNative.getDefault();
String op = args[0];
mNextArg = 1;
//Am所支持的命令
if (op.equals("start")) {
runStart();
} else if (op.equals("startservice")) {
runStartService();
} else if (op.equals("force-stop")) {
runForceStop();
} else if (op.equals("kill")) {
runKill();
} else if (op.equals("kill-all")) {
runKillAll();
} else if (op.equals("instrument")) {
runInstrument();
} else if (op.equals("broadcast")) {
sendBroadcast();
…… //很多命令
看一下发送广播的命令:
private void sendBroadcast() throws Exception {
//解析发送广播的参数
Intent intent = makeIntent(UserHandle.USER_ALL);
IntentReceiver receiver = new IntentReceiver();
//通过AMS发送广播
mAm.broadcastIntent(null, intent, null, receiver, 0, null, null, null, true, false,
receiver.waitForFinish();
所以Android 还有这样一个工具am,通过看showUsage,可以干很多事情的;
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'您现在所在的是:
三菱Mitsubishi
→ 浏览主题:
* 帖子主题:
文章数:62
年度积分:50
历史总积分:698
注册时间:
如题:最近做了个PLC控制步进电机的东西,用的是DRVI指令,但是每走一步,感觉动作很硬,很冲。有没有办法设置加减速,比如加速起步,减速停止。?先行谢过。
fumz78 版主
文章数:13453
年度积分:2025
历史总积分:25928
注册时间:
2016国庆活动(二)
2015论坛优秀版主
2014论坛优秀版主
晒晒工控小礼品
2012论坛优秀版主
2011论坛贡献奖
2010年论坛优秀版主
08年最佳博客奖
这个指令对应有特殊寄存器D8148设置加减速时间。
三菱 PLC、触摸屏、伺服电机、变频器、数控系统
文章数:62
年度积分:50
历史总积分:698
注册时间:
回复 #1楼 fumz78
感谢版主,直接赋值给这个就行了对吧?
fumz78 版主
文章数:13453
年度积分:2025
历史总积分:25928
注册时间:
2016国庆活动(二)
2015论坛优秀版主
2014论坛优秀版主
晒晒工控小礼品
2012论坛优秀版主
2011论坛贡献奖
2010年论坛优秀版主
08年最佳博客奖
直接赋值,但也要注意,赋值后,你制定的脉冲频率还有个实际输出的计算
三菱 PLC、触摸屏、伺服电机、变频器、数控系统
文章数:62
年度积分:50
历史总积分:698
注册时间:
回复 #3楼 fumz78
非常感谢版主,看了这个明白了。
文章数:4653
年度积分:1585
历史总积分:9277
注册时间:
三菱电机活动(三)
寻找英威腾(三)
三菱的有没有S型加减速
致力于自动化
伺服 PLC HMI
fumz78 版主
文章数:13453
年度积分:2025
历史总积分:25928
注册时间:
2016国庆活动(二)
2015论坛优秀版主
2014论坛优秀版主
晒晒工控小礼品
2012论坛优秀版主
2011论坛贡献奖
2010年论坛优秀版主
08年最佳博客奖
以下是引用zrx在 20:55:39的发言:
三菱的有没有S型加减速三菱高档些的定位模块,如QD75等有S型或是梯形加减速设定。此帖发自手机工控论坛
三菱 PLC、触摸屏、伺服电机、变频器、数控系统
文章数:36030
年度积分:2987
历史总积分:58431
注册时间:
2015论坛优秀版主
2014论坛优秀版主
2014相约国庆
2013论坛优秀版主
2012论坛优秀版主
2011论坛贡献奖
2010年论坛优秀版主
FX主机上带的脉冲功能没那么强,不能设定S加减速;
528工控科技
文章数:1516
年度积分:1856
历史总积分:3484
注册时间:
工控人谈电商
基底速度 D8145 &最高速度DD8146 &最好也设置一下。
专门攻打工控与计算编程结合部的闲人
文章数:62
年度积分:50
历史总积分:698
注册时间:
今天试验了一下,不管那两个参数怎么设置,好像变化不大。
工控学堂推荐视频:新手提示:
游戏中按住TAB键可以观看战斗计分板。
如果出门不知道如何买装备,不妨先买一双草鞋和若干血瓶。
游戏中按字母Y键可以切换视角。
有些装备是有主动技能的,按对应的数字键就可施放。
战斗中建议多多看看小地图,其他线路的敌人若不见了,就要小心了。
每天的第一次胜利是有额外的奖励的,包括人机模式。
游戏中左侧队友的图标上各有一个小圆点,当小圆点呈绿色时,表示此队友大招可施放。
在附近草丛插眼可以有效的防止自己被敌军偷袭。
击杀野区的红蓝BUFF怪物可获得相应的BUFF加成。
看过电玩巴士攻略再去打LOL的胜率一般都会提高百分之八十。
新手英雄介绍
小提示操作简单的英雄更适合新手
常用工具下载
帮助你快速玩转英雄联盟
查看英雄到达各级时的属性
模拟游戏中的天赋加点
符文介绍、显示***符文后属性
英雄联盟怎么跳舞 角色跳舞快捷键使用教程
作者:luna 来源:TGBUS整理 发布时间:05-03 16:08
游戏中有跳舞功能,不少新手玩家可能还不知道,和WOW一样,通过对话框输入指令,就可以让你的角色做出各种动作,包括跳舞,那么,怎么跳舞呢?请看巴士小编为您整理的英雄联盟角色跳舞快捷键使用教程。
lol英雄联盟跳舞快捷键使用方法:
一、第一种方法,直接按下键盘的Enter键然后输入/d。然后再次按下Enter发送消息就可以跳舞了。&
二、第二种方法,同第一种方法类似,输入/dance,也就是英文的跳舞意思,也可以让你的角色舞蹈起来。
键位设置
自定义快捷键
更改快捷键
三、第三种方法,我们可以按下ESC键,找到键位设置,点击进入设置页面,将跳舞设置一个快捷键,然后在游戏中按下我们设置的快捷键就可以了。
英雄联盟常用角色动作命令:
/dance
让你的人物跳舞,每位英雄的舞蹈动作都不一样。
/laugh
英雄哈哈大笑,其中意味只有自知。
讲一个笑话,可惜每个英雄只有一个笑话。
/taunt
挑衅,用来拉仇恨最好不过了。
/surrender /nosurrender
投降投票使用,二十投啊二十投
/help 命令名
例如/help joke,就会给出joke指令的详细说明
数据库 站内搜索 在PPT演示文稿中经常要用到链接功能,我们可以用“动作按钮”功能来实现。下面,我们建立一个“课堂练习”按钮,链接到第十七张幻灯片上。 1、执行“幻灯片放映动画按钮自定义”命令。 2、在幻灯片中拖拉出一个按钮来,此时系统自动弹出“动作设置”对话框。 3、选中“超链接到”选项,然后单击其右侧的下拉按钮,在随后弹出的下拉列表中,选择“幻灯片”选项,打开“超链接到幻灯片”对话框,选中第十七张幻灯片,确定返回。 4、右击按钮,在随后弹出的快捷菜单中,选择“添加文本”选项,并输入文本(如“课堂练习”)。 5、设置好文本的字号、字体等,调整好按钮大小,并将其定位在合适的位置上即可。 &
PPT教程推荐
PPT模板推荐
文档大小:6.46MB
上传时间:
文档大小:0.51MB
上传时间:
文档大小:3.32MB
上传时间:
文档大小:7.12MB
上传时间:
文档大小:2.38MB
上传时间:
文档大小:0.99MB
上传时间:后使用快捷导航没有帐号?
开启“以后自动采用相同的动作处理此类文件”命令
在下载对话框中无法勾选“以后自动采用相同的动作处理此类文件”这一选项,这一选项是灰色的,无效的,无法进行操作, 请问在如何才能开启此功能,能否详细的说明一下,还是因为别的原因影响?请务必回答的详细一些,专业些也行,只要能解决!! 谢谢, QQ
要在开始下载以前就设置。
重启火狐-&工具-&选项-&常规 找到你要改的这一项
先点上面的选项,然后再切换到“以后自动采用相同的动作处理此类文件”这一选项即可勾选
这是火狐n年的bug了,貌似还没有想修复的迹象 orz&
已在选项-常规里设置过了,故这里不能在选了,如要在这里选,可以修改选项。
取巧的一个解决方法: ①先下载一个ZIP文件
/servlet/JiveServlet/download//assemblycodefromVMware.7z.zip
记得勾选“以后自动采用相同的动作处理此类文件”
②地址栏里输入 about:support 回车。
点击“打开所在文件夹”
③以文本方式打开文件夹中的“mimeTypes.rdf”
④使用搜索替换功能将其中的 “zip”字符全部替换成“rar” 保存!
重启火狐就可以默认下载RAR文件了。