最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android提高之手游轉電視游戲的模擬操控

 更新時間:2014年08月09日 15:19:51   投稿:shichen2014  
這篇文章主要介紹了Android手游轉電視游戲的模擬操控方法,是非常具有實用價值的功能,需要的朋友可以參考下

目前智能電視終端(智能電視和智能電視盒子)已經(jīng)越來越火,過去主打視頻功能,如今的智能電視終端不僅會繼續(xù)完善視頻功能,還會加入電視游戲功能,同時這也趕上了“電視游戲機解禁”的時機。

當今的大部分Android手游都能夠在Android系統(tǒng)的電視終端上運行,其中有少數(shù)手游是原生支持手柄(例如MOGA手柄),這部分游戲可以作為電視游戲。但其他手游(射擊,賽車,動作等游戲)若要在電視上玩,就需要修改操控模式,把觸摸屏操控改為手柄實體鍵操控。

本文主要講解的是如何使用/system/bin/之下的Input命令模擬按鍵和觸摸屏操作,調用Input命令需要具備root權限。本文完整代碼點擊此處本站下載。

程序運行結果如下圖所示:

 

本文核心RootCommand.java的代碼如下,不建議把代碼濃縮成全局靜態(tài)方法,這里保持process和os這2個變量的生命周期直到app結束,可以減去多次初始化/釋放的耗時。具體代碼如下:

package com.hellogv.slinput;
import java.io.DataOutputStream;
import java.io.IOException;
import android.util.Log;
/**
 * 調用su執(zhí)行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來執(zhí)行命令,必須先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來執(zhí)行命令,必須先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程序設計有很大的幫助。

相關文章

  • Android編程中圖片特效處理方法小結

    Android編程中圖片特效處理方法小結

    這篇文章主要介紹了Android編程中圖片特效處理方法,實例總結了Android實現(xiàn)圖片的轉換、縮放、圓角及倒影等效果的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Android串口通信封裝之OkUSB的示例代碼

    Android串口通信封裝之OkUSB的示例代碼

    本篇文章主要介紹了Android串口通信封裝之OkUSB的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Flutter軟鍵盤的原理淺析

    Flutter軟鍵盤的原理淺析

    大家應該都知道目前Flutter官方是沒有自定義鍵盤的解決方案,下面這篇文章主要給大家介紹了關于Flutter軟鍵盤原理的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-10-10
  • android sdk安裝及開發(fā)環(huán)境部署

    android sdk安裝及開發(fā)環(huán)境部署

    本文給大家詳細講解了android sdk安裝方法以及android開發(fā)環(huán)境部署方法,非常的細致全面,有需要的小伙伴務必詳細研究下。
    2015-11-11
  • 獲取Android系統(tǒng)唯一識別碼的方法

    獲取Android系統(tǒng)唯一識別碼的方法

    這篇文章主要介紹了獲取Android系統(tǒng)唯一識別碼的方法,涉及通過編程獲取Android系統(tǒng)硬件設備標識的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Android實現(xiàn)局部圖片滑動指引效果示例

    Android實現(xiàn)局部圖片滑動指引效果示例

    現(xiàn)在滑動效果用的比較多,尤其是在手機端上面,本文介紹了Android實現(xiàn)局部圖片滑動指引效果示例,現(xiàn)在就分享給大家,也給大家做個參考。
    2016-10-10
  • MobLink Android端業(yè)務場景簡單說明

    MobLink Android端業(yè)務場景簡單說明

    這篇文章主要介紹了MobLink Android端業(yè)務場景簡單說明,MobLink的功能實現(xiàn)就是在分享前會將鏈接的參數(shù)信息保存到服務器,更多相關內容需要的朋友可以參考一下
    2022-09-09
  • OpenGL Shader實現(xiàn)簡單轉場效果詳解

    OpenGL Shader實現(xiàn)簡單轉場效果詳解

    轉場效果常出現(xiàn)再視頻剪輯當中,用于銜接兩段視頻片段切換的過渡效果。本文將介紹如何利用OpenGL Shader實現(xiàn)簡單的轉場效果,需要的小伙伴可以參考一下
    2022-02-02
  • Android中查看USB連接的外接設備信息的代碼實例

    Android中查看USB連接的外接設備信息的代碼實例

    這篇文章主要介紹了Android中查看USB連接的外接設備信息的代碼實例,需要的朋友可以參考下
    2014-04-04
  • Android編程實現(xiàn)讀取本地SD卡圖片的方法

    Android編程實現(xiàn)讀取本地SD卡圖片的方法

    這篇文章主要介紹了Android編程實現(xiàn)讀取本地SD卡圖片的方法,涉及Android針對文件讀取及判定操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11

最新評論

广元市| 蒙自县| 郑州市| 绥阳县| 专栏| 泰兴市| 韩城市| 高台县| 银川市| 蓝山县| 仙游县| 萨嘎县| 宜黄县| 贡山| 中江县| 通城县| 泾川县| 公主岭市| 休宁县| 马山县| 沁源县| 大丰市| 汉源县| 阿合奇县| 沅陵县| 汤原县| 浪卡子县| 搜索| 五台县| 和林格尔县| 克东县| 凤阳县| 玛纳斯县| 伊吾县| 咸阳市| 肇庆市| 湘潭市| 衢州市| 富蕴县| 昭平县| 定边县|