View 注入事件

注入是事件处理流程如:

1 .View 接受到上报的Touch事件,被分发到相应的View的OnTouch事件中,

2.我可以通过覆盖这个方法,向InputManager中注入KeyCode事件,如:back,home等

3. .back ,home 等注入事件,然后分别通过Activity.java,和PhoneWindowsManager.java的处理Event实现功能

在3.0中,我可以通过

1 .framework/base/SystemUI/src/com/android/systemui/policy/KeyButtonView.java

可以看到注入事件使用IwindowManager接口中injectInputEventNoWait(KeyEvent event);

这个接口实现在WindowManagerService.java中

2 .然后WindowManagerService中将事件上报给相应的当前系统,被应用或者系统处理

====================================================================

下面是3.0中Home键的处理过程

1 .framework/base/SystemUI/src/com/android/systemui/policy/KeyButtonView.java 中,通过

injectInputEventNoWait ,输入Home键的keyCode(在Manifest中使用这个view中添加Keycode属性)

2 .Home事件在PhoneWindowManager中interceptKeyBeforeDispatching方法中被处理

3 .调用launchHomeFromHotKey();方法回到Launch主页面

===================================================================

android中,有4种注入输入事件的方法分别是:

1.boolean injectKeyEvent(in KeyEvent ev,boolean sync); //注入key事件

2.boolean injectPointerEvent(in MotionEvent ev,boolean sync); //注入mouse事件

3.boolean injectTrackballEvent(in MotionEvent ev,boolean sync); //注入轨迹球事件

4.boolean injectInputEventNoWait(in InputEvent ev); //注入输入事件

这个四个方法都是通过IWindowManager.aidl 方式提供给别的进程调用的。

可利用这个接口实现,windows鼠标,keyboard等事件通过socket传送给android,android的server实现注入事件,进而模拟windows的鼠标的事件,从而达到window鼠标控制android的系统。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 WPF 中,ViewViewModel 的依赖注入可以通过以下几种方式来实现: 1. 通过构造函数注入: 在 ViewModel 的构造函数中,注入 View 中所需要的服务或者依赖项,例如: ``` public class MainViewModel { private readonly IMyService _myService; public MainViewModel(IMyService myService) { _myService = myService; } } ``` 在 View 中,通过创建 ViewModel 的实例,同时传入所需要的服务: ``` public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new MainViewModel(new MyService()); } } ``` 2. 通过属性注入: 在 ViewModel 中,通过属性注入需要的服务或者依赖项,例如: ``` public class MainViewModel { [Dependency] public IMyService MyService { get; set; } } ``` 在 View 中,通过依赖注入容器来实现属性的注入: ``` public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var container = new UnityContainer(); container.RegisterType<IMyService, MyService>(); DataContext = container.Resolve<MainViewModel>(); } } ``` 3. 通过方法注入: 在 ViewModel 中,通过方法注入需要的服务或者依赖项,例如: ``` public class MainViewModel { private IMyService _myService; [InjectionMethod] public void Initialize(IMyService myService) { _myService = myService; } } ``` 在 View 中,通过依赖注入容器来实现方法的注入: ``` public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var container = new UnityContainer(); container.RegisterType<IMyService, MyService>(); var mainViewModel = container.Resolve<MainViewModel>(); mainViewModel.Initialize(container.Resolve<IMyService>()); DataContext = mainViewModel; } } ``` 需要注意的是,以上三种方式都需要使用依赖注入容器来实现。在 WPF 中,常用的依赖注入容器包括 Unity、Autofac、Prism 等。具体使用哪个容器,可以根据项目的需要和个人偏好来选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值