import android.app.Activity;import android.app.Instrumentation;import android.os.Bundle;import android.view.KeyEvent;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // sendKeyCode1(KeyEvent.KEYCODE_MEDIA_STOP);        sendKeyCode2(KeyEvent.KEYCODE_VOLUME_DOWN);    }    /**     * 用Runtime模拟按键操作     *      * @param keyCode     *            按键事件(KeyEvent)的按键值     */    private void sendKeyCode1(int keyCode) {        try {            // 按键操作命令 11.24勘误,之前错误的写成了"input keycode"            String keyCommand = "input keycode " + keyCode;            // 调用Runtime模拟按键操作            Runtime.getRuntime().exec(keyCommand);        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 
     * 使用Instrumentation接口:对于非自行编译的安卓系统,无法获取系统签名,只能在前台模拟按键,不能后台模拟     * 注意:调用Instrumentation的sendKeyDownUpSync方法必须另起一个线程,否则无效     * @param keyCode     *            按键事件(KeyEvent)的按键值     * 
*/ private void sendKeyCode2(final int keyCode) { new Thread(new Runnable() { @Override public void run() { try { // 创建一个Instrumentation对象 Instrumentation inst = new Instrumentation(); // 调用inst对象的按键模拟方法 inst.sendKeyDownUpSync(keyCode); } catch (Exception e) { e.printStackTrace(); } } }).start(); } /** *
     * 此方法使用反射调用系统IWindowManager隐藏API:兼容性较差,稳定性不好,容易出错。另外实际编译时发生错误,原因暂时不明。     * 暂时还未掌握Java的反射机制,留待以后测试     * @param keyCode     * 
*/ private void sendKeyCode3(int keyCode) { /*此方法中那个的IWindowManager是不存在的,需要使用Java的反射机制才能实现*/ /** final int keyCode = key; Thread sendKeyDelay = new Thread(){ public void run() { try { Thread.sleep(100); long now = SystemClock.uptimeMillis(); KeyEvent keyDown = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, keyCode, 0); IWindowManager wm = IWindowManager.Stub.asInterface( ServiceManager.getService("window")); wm.injectKeyEvent(keyDown, false); KeyEvent keyUp = new KeyEvent(now, now, KeyEvent.ACTION_UP, keyCode, 0); wm.injectKeyEvent(keyUp, false); } catch (InterruptedException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } } }; sendKeyDelay.start(); */ }}

更多相关文章

  1. 解析#android.view.InflateException#
  2. 【备忘】Android模拟小球自由落体(SurfaceView)
  3. RxJava2源码分析
  4. Intent的定义及用法
  5. Android(安卓)屏幕宽度、高度
  6. Android(安卓)Java 与 C++ 调用过程中的常量,路径名、文件名、后
  7. Android设备上调用谷歌应用的的Intent 列表
  8. Unity3D调用Android系统相册
  9. 给recyclerAdapter打造通用点击事件监听设置BaseRecyclerAdapter

随机推荐

  1. cb-A10 调整分区
  2. Android: Android(安卓)Resources
  3. android onRestoreInstanceState调用时序
  4. android让程序全屏显示
  5. Android6.0 Audio系统代码流程
  6. Android(安卓)View drawText 文本居中
  7. android Wifi 控制
  8. 使Activity以对话框的形式弹出来
  9. android SharePrefereces的使用入门
  10. Android(安卓)结束进程的方法forceStopPa