Android提高之手游转电视游戏的模拟操控

目前智能电视终端(智能电视和智能电视盒子)已经越来越火,过去主打视频功能,如今的智能电视终端不仅会继续完善视频功能,还会加入电视游戏功能,同时这也赶上了“电视游戏机解禁”的时机。

当今的大部分Android手游都能够在Android系统的电视终端上运行,其中有少数手游是原生支持手柄(例如MOGA手柄),这部分游戏可以作为电视游戏。但其他手游(射击,赛车,动作等游戏)若要在电视上玩,就需要修改操控模式,把触摸屏操控改为手柄实体键操控。

本文主要讲解的是如何使用/system/bin/之下的Input命令模拟按键和触摸屏操作,调用Input命令需要具备root权限。本文完整代码点击此处本站下载。

程序运行结果如下图所示:

本文核心RootCommand.java的代码如下,不建议把代码浓缩成全局静态方法,这里保持process和os这2个变量的生命周期直到app结束,可以减去多次初始化/释放的耗时。具体代码如下:

package com.hellogv.slinput; import java.io.DataOutputStream; import java.io.IOException; import android.util.Log; /** * 调用su执行input命令 * 全局只调用一次init()和exit(),多次调用run()。 * @author hellogv * */ public class RootCommand { private String TAG="RootCommand"; private Process process = null; private DataOutputStream os = null; public void init() { try { process = Runtime.getRuntime().exec("su"); os = new DataOutputStream(process.getOutputStream()); } catch (IOException e) { Log.e(TAG, getExceptionMessage(e)); } } /** * 模仿shell来执行命令,必须先root再使用 * * @param command * @return */ public boolean run(String command) { try { os.writeBytes(command + "\n"); os.flush(); } catch (Exception e) { Log.e(TAG, getExceptionMessage(e)); return false; } return true; } /** * 模仿shell来执行命令,必须先root再使用 * * @param command * @return */ public void release() { try { os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { Log.e(TAG, getExceptionMessage(e)); } finally { try { if (os != null) { os.close(); } process.destroy(); } catch (Exception e) { } } } private static String getExceptionMessage(Exception ex){ String result=""; StackTraceElement[] stes = ex.getStackTrace(); for(int i=0;i<stes.length;i++){ result=result+stes[i].getClassName() + "." + stes[i].getMethodName() + " " + stes[i].getLineNumber() +"line" +"\r\n"; } return result; } }

调用RootCommand的代码如下,input命令的使用格式详见代码:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rootCommand.init(); //模拟按下Home键 btnTestKey = (Button) this.findViewById(R.id.btnTestKey); btnTestKey.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { //命令格式:input keyevent keycode rootCommand.run("/system/bin/input keyevent "+KeyEvent.KEYCODE_HOME); } }); //模拟滑动触摸屏 btnTestSwipe= (Button) this.findViewById(R.id.btnTestSwipe); btnTestSwipe.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { int x2 = MainActivity.this.getWindow().getDecorView().getWidth() - 10; //先去到桌面 rootCommand.run("/system/bin/input keyevent "+KeyEvent.KEYCODE_HOME); //滑动桌面,命令格式:input swipe x1 y1 x2 y2 for(int i=0;i<4;i++){ rootCommand.run("/system/bin/input swipe 10 300 "+x2+" 400"); rootCommand.run("/system/bin/input swipe "+x2+" 300 10 400"); } } }); //模拟点击触摸屏 btnTestTap= (Button) this.findViewById(R.id.btnTestTap); btnTestTap.setOnClickListener( new OnClickListener(){ @Override public void onClick(View v) { int[] location = new int[2]; btnTestSwipe.getLocationOnScreen(location); int x = location[0]+btnTestSwipe.getWidth()/2; int y = location[1]+btnTestSwipe.getHeight()/2; //模拟点击btnTestTap rootCommand.run("/system/bin/input tap "+x+" "+y); } }); //退出程序 btnExit = (Button) this.findViewById(R.id.btnExit); btnExit.setOnClickListener( new OnClickListener(){ @Override public void onClick(View v) { rootCommand.release(); MainActivity.this.finish(); } }); //判断是否root过,没root过不可用 if(RootTools.isRootAvailable()==false){ Toast.makeText(this, "本程序需要使用ROOT权限。", Toast.LENGTH_SHORT).show(); this.finish(); } }

感兴趣的朋友可以下载本实例的完整代码加以调试运行,相信会对大家的Android程序设计有很大的帮助。

时间: 2024-11-10 08:02:08

Android提高之手游转电视游戏的模拟操控的相关文章

Android提高之手游转电视游戏的模拟操控_Android

目前智能电视终端(智能电视和智能电视盒子)已经越来越火,过去主打视频功能,如今的智能电视终端不仅会继续完善视频功能,还会加入电视游戏功能,同时这也赶上了"电视游戏机解禁"的时机. 当今的大部分Android手游都能够在Android系统的电视终端上运行,其中有少数手游是原生支持手柄(例如MOGA手柄),这部分游戏可以作为电视游戏.但其他手游(射击,赛车,动作等游戏)若要在电视上玩,就需要修改操控模式,把触摸屏操控改为手柄实体键操控. 本文主要讲解的是如何使用/system/bin/之下

盛大游戏布局移动手游麻球游戏首推Android游戏盒

3月28日上午消息,由盛大游戏旗下麻球游戏开发的Android手机游戏集成应用"麻球游戏盒子"(http://www.maqiu.cn)今日正式上线开放下载,将在全球Android电子市场同步发行.这是盛大游戏在Android手机游戏上的首次 发力. "麻球游戏盒子"是基于Android 2.2及以上系统的一款手机游戏集成应用及下载器,依托麻球游戏全球范围内总共超过40000款的Flash游戏,是目前Android平台上内容最丰富的游戏集成应用.麻球游戏盒子彻底解决

春节来临,手游如何安排游戏活动

好的活动,可以对游戏起到积极作用,但是使用不当则会造成很多问题,甚至会加速游戏的死亡.很多游戏在做活动时,总会出现以下几种情况: 活动参与困难喧宾夺主,忘记玩家的最初目的是玩游戏. 活动奖励和付费冲突,导致游戏内经济系统崩溃. 追求短期效果,改变游戏玩法,快速透支游戏,加速游戏死亡. 所以要想做出的活动对游戏有良性的帮助,对于活动的选择是需要慎重,不能单纯的复制其他游戏的成功,盲目开始模仿.还是需要认真研究游戏的数据.关注玩家反馈.对于运营来说,抓住玩家心里的活动远比,大量活动罗列效果来的更直接

浅谈手游行业的游戏渠道的一些控制问题

中介交易 SEO诊断 淘宝客 云主机 技术大厅 作为未来三大增长点之一的游戏,一直以来就被互联网大佬视为赚钱的利器.尤其是在桌面搜索不景气的今天,视频和游戏已经成了很多公司转型必须要仰仗的大腿.无论是百度,还是网易,这些科技巨头无不看上游戏这一块肥肉,而移动互联网来势汹汹,如何把握住游戏与移动互联网的结合体-手游市场,显然就成了大家下一步要着重解决的问题. 百度收购91无线虽然在一些人看来是为了拯救孱弱不堪的移动产品体系,但在我看来则是针对未来可能存在的手游爆发增长埋下一个伏笔.一个很简单的数据

未来手游将成为游戏巨头们新的竞争热点

中介交易 SEO诊断 淘宝客 云主机 技术大厅 移动互联网的发展带动了很多新的产品,比方说:APP应用.手机游戏等,其中手游将成为未来IT巨头们新的竞争热点,为什么这么说呢?端游已经过了黄金时期,端游指的就是我们常玩的网络游戏,国内网络游戏已经渐渐走向成熟,而用户人群已经趋于饱和状态,或者是缓慢增长状态,因为最近几年页游迅速逆袭了.看看如今有多少人在玩网页游戏就知道了,网页游戏适合利用零碎时间玩,主要用户群是那些上班族,因为他们没有多少集中的时间,但是页游必须依赖于电脑,而手机游戏只要携带手机即

手游从业者谈小米新品背后的野心:提高手游分发渠道地位

小米上周发布新品后,引发了外界对硬件和价格的 众多猜想.评论.我们走访手游从业者发现,从手游的角度更能看清小米新品背后的真相.在手游从业者看来,小米手机受到华为.中兴等千元机的冲击,发布电视与平板是为了开辟第二战场,加速普及小米的手游分发平台.因为与手游分发巨大的利润相比,硬件的微利甚至亏损都是微不足道的.小米在发布新品背后隐藏的真相是:雷军最新的战略是希望通过加快平板和电视的普及来提高小米手游分发渠道的地位,从而通过游戏分发赚大钱.废话少说,下面我们 来看看手游从业者们披露的小米新品两大真相与

游戏创业进入高峰期 页游和手游需要齐头并进

中介交易 SEO诊断 淘宝客 云主机 技术大厅 第三届全球移动游戏大会今日在北京国家会议中心圆满落幕,在这次一年一度的游戏盛会上,聚集了来自海内外的游戏业大佬.网站.创业者.针对3721.html">2014年移动游戏的发展,中外游戏从业者纷纷做了精彩的演讲,通过互动分享展望2014年游戏业界的机遇和挑战.从GMGC的火爆可以看出,如今的互联网游戏市场已经迎来了一个成熟发展的高峰期,特别是移动游戏端,国内开发水平的提高,游戏推广营销的成熟.装机量和应用分发平台的增长,都促使了移动游戏的快速

“葡萄手游”近期已获得乐逗游戏千万级投资

2010年8月邓耀坤创立"兄弟玩"页游运营平台,次年5月退出"兄弟玩"寻找再次创业的机会.在手游行业火热的大背景下,邓耀坤拿出域名PT.cn,正式成立 "葡萄手游"运营平台,依托多年页游运营与研发经验,开始耕耘手游运营与发行领域.据悉,"葡萄手游"近期已获得乐逗游戏千万级投资. 页游出身 专注运营 据了解,在创立"葡萄手游"这个品牌和广州提子有限公司之前,现"葡萄手游"CEO邓耀坤曾从零

游戏行业5年之变:手游重新定义行业趋势

葛鑫在游戏行业这5年的大变局中,无论旧势力还是新贵族,它们所获得成功的价值衰变期正在快速缩短.所有的行业中人都必须紧跟变化形势,否则就要面临被淘汰的命运.就像"轰"的一声,游戏被推到了每个人面前.我们甚至都没有反应时间,就已经被各种研究机构贴上了"玩家"标签--2012年7月,美国游戏研究机构Niko Partners发布报告,称当年中国移动游戏玩家会有1.92亿,一举超过PC游戏玩家数量:2013年1月,中国版协游戏工委主办的<2012年中国游戏产业报告&g