暂停按钮在 Android 演员对话框中不起作用
Posted
技术标签:
【中文标题】暂停按钮在 Android 演员对话框中不起作用【英文标题】:Pause button not working in Android cast dialog 【发布时间】:2017-02-20 15:42:40 【问题描述】:投射对话框中的暂停按钮似乎不起作用。我注意到 CastVideos-android 示例应用存在同样的问题。有没有人解决这个问题?
【问题讨论】:
能否补充一些遇到问题的代码和日志? 【参考方案1】:我遇到了完全相同的问题,我通过使类扩展 MediaRouteDialogFactory、MediaRouteControllerDialogFragment 和 MediaRouteControllerDialog 来解决问题。
public class MyMediaRouteDialogFactory extends MediaRouteDialogFactory
@NonNull @Override
public MediaRouteControllerDialogFragment onCreateControllerDialogFragment()
return new MyMediaControllerDialogFragment();
public class MyMediaControllerDialogFragment extends MediaRouteControllerDialogFragment
@Override public void onCreate(@Nullable Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, android.R.style.Theme_NoTitleBar_Fullscreen);
@Override
public MediaRouteControllerDialog onCreateControllerDialog(Context context, Bundle savedInstanceState)
return new MyMediaRouteControllerDialog(context);
public class MyMediaRouteControllerDialog extends MediaRouteControllerDialog
public MyMediaRouteControllerDialog(Context context)
super(context);
public MyMediaRouteControllerDialog(Context context, int theme)
super(context, theme);
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
Window window = getWindow();
if (window != null)
window.getAttributes().dimAmount = 0.5f;
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
View playPause = findById(this, R.id.mr_control_play_pause);
if (playPause != null && playPause instanceof ImageView && getOwnerActivity() != null)
UIMediaController mediaController = new UIMediaController(getOwnerActivity());
mediaController.bindImageViewToPlayPauseToggle((ImageView) playPause, mPlayArrowDrawable, mPauseDrawable, mStopDrawable, null, false);
// On initializing MediaRouteButton
((MediaRouteButton) mCastButton).setDialogFactory(new MyMediaRouteDialogFactory());
CastButtonFactory.setUpMediaRouteButton(getActivity(), mCastButton);
简而言之,我将播放/暂停按钮绑定到 UIMediaController。
【讨论】:
Jaewoo,感谢您的详细回复。我唯一卡住的地方是最后一部分。在我的应用程序中,投射按钮是在操作栏菜单中定义的,因此我调用 CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), m, R.id.item_mediaroute) 其中 m 是在 AppCompatActivity.onCreateOptionsMenu 调用中膨胀的菜单。不知道如何使用我的用法来设置对话框工厂.. 诀窍是通过调用 (MediaRouteActionProvider)MenuItemCompat.getActionProvider(MenuItem) 然后调用 setDialogFactory 来获取 MediaRouteActionProvider 所以现在暂停按钮向接收器发送一条消息,接收器又在 javascript 中调用我的 cast.receiver.media.Player.pause() 实例。完美的。再次在接收端,我将播放器的状态从“PLAYING”更改为“PAUSED”,并在 cast.receiver.media.Player.getState() 中返回该字符串。这样做会导致发送方演员对话框中的暂停图像更改为播放图像。进步!但是,在演员对话框中按下播放按钮没有任何作用......我将在 CastVideos-android 示例应用程序上尝试一下 在 CastVideos-android 示例应用中实施 Jaewoo 的回答修复了演员对话播放/暂停功能。我仍然有暂停工作但不播放的问题,但我认为这是因为我有一个自定义接收器,需要进一步研究协议。 更确切地说,github上的示例应用程序本身运行良好(它使用支持库23.4.0和播放服务9.4.0),但是更新支持库和谷歌播放服务库 - to-date 提出了这个问题。目前,支持库 25.2.0 和播放服务 10.2.0 是最新版本。【参考方案2】:请更新您的 google play services。使用 9.8.0 时遇到同样的问题。更新到 10.2.1,已经解决了。
【讨论】:
以上是关于暂停按钮在 Android 演员对话框中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
列表项 longClickListener 打开对话框在 android 中不起作用?
主页和后退按钮在 android 模拟器像素 2 和像素 3 api 中不起作用