IWindowManager.injectKeyEvent模拟按键
来源:互联网 发布:遥感大数据的定义 编辑:程序博客网 时间:2024/06/14 17:13
描述: IWindowManager 提供了模拟 KeyEvents的简单方法,名字叫做 IWindowManager.injectKeyEvent(...). 要模拟KeyStroke(按键敲击), 我们需要模拟一个 指定KeyCode 的 KeyEvent.ACTION_DOWN 和 KeyEvent.ACTION_UP
.
在这个例子里我们将要模拟 Menu按键的 KeyStroke , 以使 Menu 弹出.
下面是这个例子的源码
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
androidrientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button id="@+id/cmd_simulate_key"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Simulate Menu Key Press"
/>
</LinearLayout>
.
在这个例子里我们将要模拟 Menu按键的 KeyStroke , 以使 Menu 弹出.
下面是这个例子的源码
- package org.anddev.android.simualtekeys;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.DeadObjectException;
- import android.os.ServiceManager;
- import android.view.IWindowManager;
- import android.view.KeyEvent;
- import android.view.Menu;
- import android.view.View;
- import android.view.View.OnClickListener;
- public class SimualteKeyInput extends Activity {
- /* The WindowManager capable of injecting keyStrokes. */
- final IWindowManager windowManager = IWindowManager.Stub
- .asInterface(ServiceManager.getService("window"));
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setContentView(R.layout.main);
- /* Make the button do the menu-popup. */
- this.findViewById(R.id.cmd_simulate_key).setOnClickListener(
- new OnClickListener() {
- @Override
- public void onClick(View arg0) {
- /* Start the key-simulation in a thread
- * so we do not block the GUI. */
- new Thread(new Runnable() {
- public void run() {
- /* Simulate a KeyStroke to the menu-button. */
- simulateKeystroke(KeyEvent.KEYCODE_SOFT_LEFT);
- }
- }).start(); /* And start the Thread. */
- }
- });
- }
- /** Create a dummy-menu. */
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- boolean supRetVal = super.onCreateOptionsMenu(menu);
- menu.add(0, 0, "Awesome it works =)");
- return supRetVal;
- }
- /** Wrapper-function taking a KeyCode.
- * A complete KeyStroke is DOWN and UP Action on a key! */
- private void simulateKeystroke(int KeyCode) {
- doInjectKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyCode));
- doInjectKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyCode));
- }
- /** This function actually handles the KeyStroke-Injection. */
- private void doInjectKeyEvent(KeyEvent kEvent) {
- try {
- /* Inject the KeyEvent to the Window-Manager. */
- windowManager.injectKeyEvent(kEvent.isDown(), kEvent.getKeyCode(),
- kEvent.getRepeatCount(), kEvent.getDownTime(), kEvent
- .getEventTime(), true);
- } catch (DeadObjectException e) {
- e.printStackTrace();
- }
- }
- }
package org.anddev.android.simualtekeys;import android.app.Activity;import android.os.Bundle;import android.os.DeadObjectException;import android.os.ServiceManager;import android.view.IWindowManager;import android.view.KeyEvent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;public class SimualteKeyInput extends Activity { /* The WindowManager capable of injecting keyStrokes. */ final IWindowManager windowManager = IWindowManager.Stub .asInterface(ServiceManager.getService("window")); /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); /* Make the button do the menu-popup. */ this.findViewById(R.id.cmd_simulate_key).setOnClickListener( new OnClickListener() { @Override public void onClick(View arg0) { /* Start the key-simulation in a thread * so we do not block the GUI. */ new Thread(new Runnable() { public void run() { /* Simulate a KeyStroke to the menu-button. */ simulateKeystroke(KeyEvent.KEYCODE_SOFT_LEFT); } }).start(); /* And start the Thread. */ } }); } /** Create a dummy-menu. */ @Override public boolean onCreateOptionsMenu(Menu menu) { boolean supRetVal = super.onCreateOptionsMenu(menu); menu.add(0, 0, "Awesome it works =)"); return supRetVal; } /** Wrapper-function taking a KeyCode. * A complete KeyStroke is DOWN and UP Action on a key! */ private void simulateKeystroke(int KeyCode) { doInjectKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyCode)); doInjectKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyCode)); } /** This function actually handles the KeyStroke-Injection. */ private void doInjectKeyEvent(KeyEvent kEvent) { try { /* Inject the KeyEvent to the Window-Manager. */ windowManager.injectKeyEvent(kEvent.isDown(), kEvent.getKeyCode(), kEvent.getRepeatCount(), kEvent.getDownTime(), kEvent .getEventTime(), true); } catch (DeadObjectException e) { e.printStackTrace(); } }}
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
androidrientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button id="@+id/cmd_simulate_key"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Simulate Menu Key Press"
/>
</LinearLayout>
给个链接:http://blog.csdn.net/xudongdong99/article/details/8857173
- IWindowManager.injectKeyEvent模拟按键
- IWindowManager.injectKeyEvent模拟按键
- android模拟按键问题总结[使用IWindowManager.injectKeyEvent方法]
- android模拟按键问题总结[使用IWindowManager.injectKeyEvent方
- android模拟按键问题总结[使用IWindowManager.injectKeyEvent方法]
- 模拟按键
- 模拟按键
- 按键模拟
- 模拟按键
- 模拟按键
- android 软按键 模拟按键
- 模拟键盘按键
- 模拟键盘按键
- 如何模拟按键
- VB模拟按键
- Symbian 模拟按键关机
- 模拟鼠标,按键代码
- 模拟键盘按键
- C# 批处理MYSQL语句记录
- JavaScript==比较的规则
- /proc虚拟文件系统与系统内核参数修改方法
- svn编译安装错误解决
- 如何确定页时就完成了在 web 浏览器控件加载
- IWindowManager.injectKeyEvent模拟按键
- 英语练习110 Recycling
- HTML 5在移动端有没有未来?
- DMF sys.dm_os_volume_stats監控物理磁盤
- poj 1004 算平均数
- win7系统下硬盘安装CentOS5.5
- 去除单(多)文档窗口标题栏的文档名
- java.io.IOException: Parent directory of file is not writable
- jquery常识