gpt4 book ai didi

android - 获取当前正在运行的 Activity 的实例?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:55:00 29 4
gpt4 key购买 nike

我想做的是将运动事件分派(dispatch)给当前正在运行的 Activity 。我从这段代码中得到了当前 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;

现在我有了组件名称,我想派发事件

dispatchTouchEvent(MotionEvent ev)

它在 Activity 类中,为此我需要一个当前 Activity 的实例。我被困在组件名称上。如何获取 Activity 实例以便我可以调度事件?

最佳答案

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

What i am trying to do is to dispatch the motion event to currently running activity

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

I have got the ComponentName of the current activity from this code

ActivityManager.getRunningTasks() 不适用于正常的应用程序开发。这适用于任务管理器等。您永远不应编写依赖于此函数返回的信息的核心程序逻辑。那是在自讨苦吃,事实上我可以保证这样的代码会在某个时刻崩溃。 (当多个应用程序可以同时运行在前端时会发生什么?)

I want to dispatch the event

您真的,真的不应该将运动事件从一个窗口中提取出来,然后塞到另一个窗口中。各种调度状态将无法正确设置,事件中的状态将不一致(事件设置有原点等原始窗口,而不是您正在填充的新窗口)等。这是另一个制作一个 future 很有可能崩溃的易碎应用程序的好方法,如果你甚至可以拼凑它让它在今天完全正常工作的话。

I am stuck at component name. How can I get the Activity instance so that I can dispatch the event?

的确,您所拥有的只是一个组件名称。这与 Activity 实例无关。没有神奇的方法可以将它变成一个实际的实例。提供一个是错误的,因为这很容易产生歧义(如果实例化了该类的两个实例)。

我认为您需要回到开始并查看您实际想要完成的目标,以获得有关实现它的合理方法的帮助。您所走的路在这一点上已经走到尽头了。

关于android - 获取当前正在运行的 Activity 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10324856/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com