【问题标题】:Detect every touch events without getting Application Context?在不获取应用程序上下文的情况下检测每个触摸事件?
【发布时间】:2015-12-04 05:42:53
【问题描述】:

我们可以通过在上下文中使用 getWindow() 来获取每个 Activity 的触摸事件,例如:

//set Window.Callback for getting touch event 
        final Window window = context.getWindow();
        final Window.Callback localCallback = window.getCallback();
        window.setCallback(new MyWindowCallback(localCallback));

我们如何在不使用上下文的情况下实现它?

有什么办法可以移除这个回调(因为window类没有移除回调方法?

【问题讨论】:

  • "我们如何在不使用上下文的情况下实现它?" - 你不能,真的。你可以实例化你自己的窗口,但你仍然需要一个上下文来做到这一点。你想做什么?
  • win.setCallback(null) 怎么样?删除监听器?
  • 如果您设置为 null,应用程序将崩溃。 @迈克M。我想我们可以这样做:检查这些 cmets:stackoverflow.com/questions/25441531/…
  • 为什么要移除回调?
  • 是的,但您仍然需要上下文。如果您的意思是您需要在有权访问的类之外获取 Context,您应该在问题中更清楚地解释这一点。

标签: android android-activity


【解决方案1】:

有一种方法可以在不传递应用程序上下文的情况下获取它。我在生产环境中使用过这段代码,效果很好。

private static Application getApplicationContext() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
    Context context;
    final Class<?> activityThreadClass =
            Class.forName("android.app.ActivityThread");
    final Method method = activityThreadClass.getMethod("currentApplication");
    context = (Application) method.invoke(null, (Object[]) null);
    Log.d(tag_, "Context is " + context);
    application = (Application)context;
    return application;
}

【讨论】:

  • 你能去掉回调吗?
  • 忽略回调。不要执行你的代码添加条件。
  • 这是我目前正在做的......但我想创建一种方法来删除这个回调
  • 尝试使用 getCallback 保留原始回调的实例,然后稍后设置该回调,这样您的回调就不会被调用。
  • 我在之前的评论中试图这么说。 :)
猜你喜欢
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多