YouTube Android 播放器 API - 以编程方式执行对 "skip ad" 的点击
YouTube Android Player API - Programatically perform a click on "skip ad"
简介
我在一个 android 应用程序中工作,该应用程序通过 http 网络命令(而不是通过触摸)接收命令。
我需要完成什么
我希望能够在用户通过 http 命令指示要执行跳过添加的点击时,以编程方式指示 youtube 播放器(嵌入在我的应用程序中)跳过添加。
查看可用功能我只能检查播放器是否显示广告,但与能够通过方法跳过它无关。
我是怎么解决的
我正在尝试通过:
- 获取 activity
的所有子视图及其子视图
- 找出我需要执行点击的视图
- 通过 view.performClick()
执行点击
我的问题是它很少显示广告,这意味着我无法完成任务,甚至不知道这是否会在有用的时间起作用。
有什么想法可以帮助解决主要问题吗?
提前致谢。
理想情况下,Google 可以提供一个 api 调用,允许跳过屏幕上显示的广告 "You can skip ad in 5, 4, 3, 2, 1s"。
电视机顶盒也有同样的问题。他们没有鼠标很常见,因此您无法将光标移动到 "skip ad" 按钮并单击。
我的解决方案是创建一个模拟触摸事件,您可以从这个讨论中找到:How to simulate a touch event in Android?。
技巧在于计算 "skip ad" 按钮的 x 和 y。
我能够在运行时找到视图:
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;
}
复制自:
感谢这个美好的社区,感谢上帝!
简介
我在一个 android 应用程序中工作,该应用程序通过 http 网络命令(而不是通过触摸)接收命令。
我需要完成什么
我希望能够在用户通过 http 命令指示要执行跳过添加的点击时,以编程方式指示 youtube 播放器(嵌入在我的应用程序中)跳过添加。
查看可用功能我只能检查播放器是否显示广告,但与能够通过方法跳过它无关。
我是怎么解决的
我正在尝试通过:
- 获取 activity 的所有子视图及其子视图
- 找出我需要执行点击的视图
- 通过 view.performClick() 执行点击
我的问题是它很少显示广告,这意味着我无法完成任务,甚至不知道这是否会在有用的时间起作用。
有什么想法可以帮助解决主要问题吗?
提前致谢。
理想情况下,Google 可以提供一个 api 调用,允许跳过屏幕上显示的广告 "You can skip ad in 5, 4, 3, 2, 1s"。
电视机顶盒也有同样的问题。他们没有鼠标很常见,因此您无法将光标移动到 "skip ad" 按钮并单击。
我的解决方案是创建一个模拟触摸事件,您可以从这个讨论中找到:How to simulate a touch event in Android?。
技巧在于计算 "skip ad" 按钮的 x 和 y。
我能够在运行时找到视图:
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;
}
复制自:
感谢这个美好的社区,感谢上帝!