Android模拟按键

如果想要实现类似iphone的悬浮框按钮,那就必须知道如何去模拟真实按键,然后才能将按键功能与悬浮框按钮联系起来,下面就详细说明一下具体的模拟实现:
实现方式有两种,一种是通过Command命令方式,另外一种是通过Instrumentation方式。
一 Command命令方式:

try{
String keyCommand = "input keyevent " + KeyEvent.KEYCODE_BACK;
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(keyCommand);
} catch(IOException e){

}

二 Instrumentation方式:
		
private Instrumentation in =new Instrumentation();
new Thread(new Runnable() {
@Override
public void run() {
in.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
}
}).start();

注意sendKeyDownUpSync方法必须放到非主线程去调用。

以上两种方法都有一个缺点,那就是home是无法模拟的,那至于home键我们需要如何做呢?首先需要分析home键的功能,短按home键是返回桌面,长按home键是拉起最近使用程序列表,知道这些就简单了,只需要在虚拟home键的地方实现上述两个功能就可以了,具体如下:
一 短按home:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);


二 长按home:

IStatusBarService mStatusBarService;
final Object mServiceAquireLock = new Object();
IStatusBarService getStatusBarService() {
synchronized (mServiceAquireLock) {
if (mStatusBarService == null) {
mStatusBarService = IStatusBarService.Stub.asInterface(
ServiceManager.getService("statusbar"));
}
return mStatusBarService;
}
}

try {
IStatusBarService statusbar = getStatusBarService();
if (statusbar != null) {
statusbar.toggleRecentApps();
}
} catch (RemoteException e) {
mStatusBarService = null;
}


长按home键功能在android最新版本是在SystemUI中实现的,此法只针对新版,老版本的没有研究过
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值