ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); // get the info from the currently running task List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); Log.d("current task :","CURRENT Activity ::" + taskInfo.get(0).topActivity.getClassName()); ComponentName componentInfo = taskInfo.get(0).topActivity;
现在我有了组件名称,我想调度该事件
dispatchTouchEvent(MotionEvent ev)
这是在Activity类中,要做到这一点,我需要一个当前活动的实例.我被困在组件名称.如何获取Activity实例以便我可以调度该事件?
解决方法
What i am trying to do is to dispatch the motion event to currently running activity
当前的前台活动将获得运动事件,除非它不应该.我能想象到这一点的唯一方法就是你的服务已经把一个系统窗口放在了所有应用程序之上……在这种情况下,我会敦促你不要这样做,只是让你的前景活动处理事件.
I have got the ComponentName of the current activity from this code
ActivityManager.getRunningTasks()不适用于正常的应用程序开发.这适用于任务管理员等.您永远不应该编写依赖于此函数返回的信息的核心程序逻辑.那是乞求麻烦,事实上我可以保证这样的代码会在某些时候破坏. (当多个应用程序可以同时在前面运行时会发生什么?)
I want to dispatch the event
你真的,真的不应该从一个窗口中扯下运动事件并将它们塞进另一个窗口.各种调度状态将无法正确设置,事件中的状态将不一致(事件设置为原始窗口的原点等,而不是您填充它的新事件),等等.这是另一个很好的方法来制作一个很有可能在未来破坏的片状应用程序,如果你甚至可以使它在今天完全可以运行的话.
I am stuck at component name. How can I get the Activity instance so that I can dispatch the event?
实际上,你所拥有的只是一个组件名称.这与活动实例无关.没有神奇的方法可以将其变成实际的实例.提供一个是错误的,因为这很容易模糊(如果有两个实例化的实例).
我认为你需要备份到开始并看看你实际想要完成的事情,以获得有关合理的接近方式的帮助.你已经陷入困境的道路在这一点上非常终端.