暂停按钮在 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 演员对话框中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android 投射通知在锁定屏幕中不起作用

片段中的按钮在android中不起作用

列表项 longClickListener 打开对话框在 android 中不起作用?

主页和后退按钮在 android 模拟器像素 2 和像素 3 api 中不起作用

findElement 在 Android 上的 Appium 中不起作用

android:背景在材料设计按钮组件中不起作用