【问题标题】:How to control play/pause state of MediaBrowserServiceCompat from RecyclerView?在 recyclerview 中使用 android 来控制带有 onClick 的 MediaBrowserServiceCompat
【发布时间】:2023-01-20 03:49:30
【问题描述】:

我如何从我的回收站控制查看 MediaBrowserServiceCompat 中的播放和暂停状态?

【问题讨论】:

    标签: android android-recyclerview exoplayer mutablelivedata mediabrowserservicecompat


    【解决方案1】:

    如果 uri 与上一次点击不同,我希望它只添加一个新的 QueueItem

    如果是相同的。如果它已经开始播放它应该继续播放但是如果它已经播放完并且它是相同的 uri 它应该倒带但只需点击一下

    所以我这样做了

    root.binding.playChat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //root.setIsRecyclable(false);
            root.binding.textView40.setTag(position);
            Gson gson = new GsonBuilder().create();
            ChatMessageViewModel chat = getCurrentList().get(position);
            String attachments = gson.toJson(chat.getAttachments());
            Type collectionType = new TypeToken<Collection<Attachments>>() {}.getType();
            Collection<Attachments> enums = gson.fromJson(attachments, collectionType);
            for (Attachments a : enums) {String path = a.getPath();
                try {
                    currentPlay = root.binding.playChat;
                    seekBar = root.binding.sb;
                    textView = root.binding.textView40;
                    String preUrl = "";
                    String newURL = domain + path + "?apikey=" + encodeValue(apikey) + "&auth=" + auth + "&secret=" + encodeValue(secret);
                    //if (preUrl.isEmpty()){
                    String oldUrl = preUrl;
                    if (!newURL.equals(url)) {
                        url = newURL;
                    Uri myUri = Uri.parse(url);
                    voicemailViewModel.addURItoQueueChat(MediaControllerCompat.getMediaController(ChatActivity.this), myUri);
                    //root.binding.textView40.setText((Utils.formatLongMilliSeconds(longProgress)));
                    Log.v("cptv", String.valueOf(longProgress));
                    initReceiver();
                    changePlayback();
                     }else {
                       MediaControllerCompat.TransportControls transportControls =  MediaControllerCompat.getMediaController(ChatActivity.this).getTransportControls();
                        int pbState = MediaControllerCompat.getMediaController(ChatActivity.this).getPlaybackState().getState();
                        if (pbState == PlaybackStateCompat.STATE_PLAYING) {changePlayback();
                        }else if (pbState == PlaybackStateCompat.STATE_PAUSED ) {changePlayback();
                        }else {
                            VoicemailPlayingService.getLiveState().observe(ChatActivity.this, new Observer<Integer>() {
                                @Override
                                public void onChanged(Integer integer) {
                                    if (integer == ExoPlayer.STATE_ENDED){
                                        MediaControllerCompat.getMediaController(ChatActivity.this).getTransportControls().seekTo(0);
                                        MediaControllerCompat.getMediaController(ChatActivity.this).getTransportControls().pause();
                                        currentPlay.setImageResource(R.drawable.ic_outline_play_arrow_24);}
    
                                }
                            });
                        }
                    }
                } catch (Exception e) {}
            }
        }
    

    changePlayback() 是这样的

    void changePlayback() {
        int pbState = MediaControllerCompat.getMediaController(ChatActivity.this).getPlaybackState().getState();
        if (pbState == PlaybackStateCompat.STATE_PLAYING) {
            MediaControllerCompat.getMediaController(this).getTransportControls().pause();
            currentPlay.setImageResource(R.drawable.ic_outline_play_arrow_24);
        } else if (pbState == PlaybackStateCompat.STATE_PAUSED || pbState ==0 ){
            MediaControllerCompat.getMediaController(this).getTransportControls().play();
            currentPlay.setImageResource(R.drawable.ic_baseline_pause_24);}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      相关资源
      最近更新 更多