【问题标题】:YouTube Android Player API - Programatically perform a click on "skip ad"YouTube Android Player API - 以编程方式执行“跳过广告”点击
【发布时间】:2017-03-31 00:21:52
【问题描述】:

简介

我正在一个通过 http 网络命令(而不是通过触摸)接收命令的 android 应用程序中工作。

我需要完成什么

每当用户通过 http 命令指示想要单击跳过添加时,我希望能够以编程方式指示 youtube 播放器(嵌入在我的应用程序中)跳过添加。

查看可用功能,我只能检查播放器是否正在显示广告,但与能够通过方法跳过它无关。

我是如何解决的

我正在尝试通过:

  1. 获取活动的所有子视图及其子视图
  2. 找出我需要执行点击的视图
  3. 通过view.performClick()执行点击

我的问题是它很少显示广告,这意味着我无法完成任务,甚至不知道这是否会在有用的时间内发挥作用。

有什么想法可以帮助解决主要问题?

提前致谢。

【问题讨论】:

    标签: android youtube-api android-youtube-api


    【解决方案1】:

    我能够在运行时找到视图:

    List<View> views = getAllChildrenBFS(mYouTubeView);
    for (final View v: views) {
        if (v.toString().contains("skip_ad_button")){
            v.setFocusable(true);
            v.setFocusableInTouchMode(true);
            v.requestFocus();
            break;
        }
    }
    

    我将焦点设置在按钮上,因此用户可以跳过它。

    (您可以尝试使用 performClick,但我不确定 youtube 是否会对此感到非常高兴...)


    BFS 搜索功能:

    private List<View> getAllChildrenBFS(View v) {
        List<View> visited = new ArrayList<View>();
        List<View> unvisited = new ArrayList<View>();
        unvisited.add(v);
    
        while (!unvisited.isEmpty()) {
            View child = unvisited.remove(0);
            visited.add(child);
            if (!(child instanceof ViewGroup)) continue;
            ViewGroup group = (ViewGroup) child;
            final int childCount = group.getChildCount();
            for (int i=0; i<childCount; i++) unvisited.add(group.getChildAt(i));
        }
    
        return visited;
    }
    

    复制自: https://stackoverflow.com/a/18818750

    感谢这个奇妙的社区,感谢主!

    【讨论】:

      【解决方案2】:

      理想情况下,Google 可以提供允许跳过广告的 api 调用,因为它显示在屏幕上“您可以在 5、4、3、2、1s 内跳过广告”。

      对于电视机顶盒,它也有同样的问题。他们没有鼠标是很常见的,因此您无法将光标移动到“跳过广告”按钮并单击。

      我的解决方案是创建一个模拟触摸事件,您可以从以下讨论中找到:How to simulate a touch event in Android?

      诀窍在于计算“跳过广告”按钮的 x 和 y。

      【讨论】:

      • 我就是这样做的,但我不喜欢这个解决方案。无论如何,这是我唯一想出来的。谢谢。
      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 2015-08-20
      • 2013-08-17
      • 2020-02-12
      • 2014-11-10
      • 2021-05-06
      • 2012-12-03
      • 2013-01-03
      相关资源
      最近更新 更多