获取当前正在运行的活动的实例

Ahm*_*med 7 events android android-activity

我想要做的是将动作事件发送到当前正在运行的活动.我从这段代码中获得了当前活动的ComponentName

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;
Run Code Online (Sandbox Code Playgroud)

现在我有了组件名称,我想调度该事件

dispatchTouchEvent(MotionEvent ev)
Run Code Online (Sandbox Code Playgroud)

Activity课堂上,要做到这一点,我需要一个当前活动的实例.我被困在组件名称.如何获取Activity实例以便我可以发送事件?

hac*_*bod 7

哇,这个问题有很多问题,很难知道从哪里开始!让我们按顺序排列:

我想要做的是将动作事件发送到当前正在运行的活动

当前的前台活动将获得运动事件,除非它不应该.我能想象到这一点的唯一方法就是你的服务已经把一个系统窗口放在所有应用程序之上......在这种情况下,我会敦促你不要这样做,只是让你的前景活动处理事件.

我从这段代码中获得了当前活动的ComponentName

ActivityManager.getRunningTasks()不适用于正常的应用程序开发.这适用于任务管理器等.您永远不应该编写依赖于此函数返回的信息的核心程序逻辑.那是乞求麻烦,事实上我可以保证这样的代码会在某些时候破裂.(当多个应用程序可以同时在前面运行时会发生什么?)

我想派遣这个活动

你真的,真的不应该从一个窗口中扯下运动事件并将它们塞进另一个窗口.各种调度状态将无法正确设置,事件中的状态将不一致(事件设置为原始窗口的原点等,而不是您填入的新事件),等等.这是另一个如果你甚至可以利用它来使它在今天完全发挥作用,那么制作一个很有可能在未来破坏的片状应用程序的好方法.

我被困在组件名称.如何获取Activity实例以便我可以调度该事件?

实际上,你所拥有的只是一个组件名称.这与活动实例无关.没有神奇的方法可以将其转化为实际的实例.提供一个是错误的,因为这很容易模糊(如果有两个实例化的实例).

我认为你需要备份到开始并看看你实际想要完成什么,以获得合理的接近它的方法的帮助.在这一点上你已经让自己陷入困境的道路非常终端.