YouTube Android Player API - 以编程方式执行点击"跳过广告"

时间:2016-11-16 17:15:53

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

简介

我在Android应用程序中工作,通过http网络命令(而不是通过触摸)接收命令。

我需要完成的工作

我希望能够在用户通过http命令指示想要对跳过添加执行点击时,以编程方式指示youtube-player(嵌入在我的应用中),跳过添加。

查看可用的功能我只能检查播放器是否正在显示广告,但没有任何相关内容可以通过某种方法跳过它。

我是如何尝试解决的

我试图通过:

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

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

    任何可以帮助解决主要问题的想法?

    提前致谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

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

感谢这个精彩的社区,感谢上帝!