从点击音乐通知返回活动时单击到下一个音乐视图不更新

时间:2018-05-17 11:07:59

标签: android

当我点击音乐通知并运行活动时。当音乐改变时,textview的内容发生了变化,但是视图没有更新,但是当我独立运行一个活动时,一切正常并且查看更新。

在musicService类中:

PendingIntent contentPendingIntent = PendingIntent.getActivity
            (this, 0, new Intent(this, MusicPlayer.class), 0);
    builder.setContentTitle(mMedia.getTitleMedia())
            .setContentText(mMedia.getSingerName())
            .setContentIntent(contentPendingIntent)
            .setSmallIcon(R.drawable.ic_notification)
            .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
            .addAction(restartAction)
            .addAction(playPauseAction)
            .addAction(nextMusic)
            .setDeleteIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(getApplicationContext(), PlaybackStateCompat.ACTION_STOP));

和我的活动课

public class MusicPlayer extends AppCompatActivity implements ServiceConnection, CacheListener, SeekBar.OnSeekBarChangeListener, Player.EventListener {

private SimpleExoPlayerView mPlayerView;
public PlayerService mPlayerService;
private boolean mBound;
//______________________________________________________________________________________________
VolleyRequestHelper volleyRequestHelper;
//______________________________________________________________________________________________
public static MusicPlayer instance;
public ImageView download;
TextView title;
TextView artist;
SeekBar progressBar;
ImageView circleImageView;
ImageView album_art_blurred;
PlayPauseButton mPlayPause;
public AppBarLayout appBarLayout;
private final VideoProgressUpdater updater = new VideoProgressUpdater();
public DownloadProgressView downloadProgressView;
//______________________________________________________________________________________________
TextView songElapsedTime;
TextView songDuration;
int positionOfMusic = 0;
public Media media;
boolean initAlbum = false;
boolean startService = false;
boolean checkChangeMediaDetails = true;
//______________________________________________________________________________________________
RecyclerView recyclerViewArtist;
SimilarSongsAdapter similarSongsAdapter;
public List<Media> similarSongsList = new ArrayList<>();
//______________________________________________________________________________________________
int songElapsed = 0;
int songDurationTime = 0;
int videoProgress = 0;
int mediaServiceRun = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_music_player);
    instance = this;
    volleyRequestHelper = VolleyRequestHelper.getInstance(getApplicationContext(), requestCompletedListener);
    initView();
    initRecyclerview();
    Intent intent = getIntent();
    mediaServiceRun = intent.getIntExtra("mediaServiceRun", 1);
    if (mediaServiceRun == 1) {
        Intent i = new Intent(this, PlayerService.class);
        bindService(i, this, Context.BIND_AUTO_CREATE);
        startService(i);
    } else {
        media = intent.getParcelableExtra("media");
        switch (media.getCustomMediaType()) {
            case "آهنگ آلبوم":
                setMedia(media);

                getAlbumTrack(media.getAlbumId());
                break;
            case "آلبوم":
                initAlbum = true;
                getAlbumTrack(media.getId());
                break;
            default:
                setMedia(media);
                Serach(media.getSingerName(), "1");
                break;
        }
        selectMedia(media);
    }
}

@Override
protected void onStart() {
    super.onStart();
}

@Override
protected void onStop() {
    super.onStop();
    if (mBound) {
        unbindService(this);
        mBound = false;
    }
}

@Override
protected void onResume() {
    super.onResume();
    updater.start();
}

@Override
public void onPause() {
    super.onPause();
    updater.stop();
}

//_________________________ServiceConnected_and_ServiceDisconnected_____________________________
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
    PlayerService.MyBinder b = (PlayerService.MyBinder) iBinder;
    mPlayerService = b.getService();
    mPlayerView.setUseController(false);
    mPlayerView.setPlayer(mPlayerService.getExoPlayer());
    if (mediaServiceRun == 1) {
        similarSongsList = mPlayerService.getOnlineList();
        initView();
        initRecyclerview();
        musicChange(mPlayerService.getPlayingMedia());
    } else {
        mPlayerService.getExoPlayer().addListener(this);
        mPlayerService.setPlayingMedia(positionOfMusic);
        setMusicInService(media, mPlayerService.getPlayingMedia());
        if (similarSongsList != null && similarSongsList.size() != 0) {
            mPlayerService.setOnlineList(similarSongsList);
        }
    }
    mBound = true;
}

@Override
public void onServiceDisconnected(ComponentName componentName) {
    mBound = false;
}

//______________________________________________________________________________________________
//_______________________________________setMediaInView_________________________________________
public void setMedia(Media mediaL) {
    media = mediaL;
    bluredImage(mediaL.getCover());
    Picasso.with(this).load(mediaL.getCover()).into(circleImageView);
    title.setText(mediaL.getTitleMedia());
    artist.setText(mediaL.getSingerName());
    checkCachedState(mediaL.getStreamUrl());
    checkChangeMediaDetails = false;
}

public void bluredImage(String IMAGE_URL) {
    Target target = new Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            album_art_blurred.setImageBitmap(BlurImage.fastblur(bitmap, 1f, 50));
        }

        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
            album_art_blurred.setImageResource(R.mipmap.ic_launcher);

        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {

        }
    };

    album_art_blurred.setTag(target);
    Picasso.with(this)
            .load(IMAGE_URL)
            .error(R.mipmap.ic_launcher)
            .placeholder(R.mipmap.ic_launcher)
            .into(target);
}

//______________________________________________________________________________________________
//______________________________________initView________________________________________________
public void initRecyclerview() {
    recyclerViewArtist = (RecyclerView) findViewById(R.id.queue_recyclerview_horizontal);
    recyclerViewArtist.setNestedScrollingEnabled(false);
    recyclerViewArtist.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
    LinearLayoutManager horizontalLayoutManagaertwo
            = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false);
    recyclerViewArtist.setLayoutManager(horizontalLayoutManagaertwo);
    similarSongsAdapter = new SimilarSongsAdapter(this, similarSongsList, recyclerViewArtist);
    recyclerViewArtist.setAdapter(similarSongsAdapter);
}

public void initView() {
    mPlayerView = (SimpleExoPlayerView) findViewById(R.id.simpleExoPlayerView);
    appBarLayout = (AppBarLayout) findViewById(R.id.appbar);
    downloadProgressView = (DownloadProgressView) findViewById(R.id.downloadProgressView);
    downloadProgressView.setPercentageColor(Color.parseColor("#ffffff"));
    downloadProgressView.setDownloadedSizeColor(Color.parseColor("#ffffff"));
    downloadProgressView.setTotalSizeColor(Color.parseColor("#ffffff"));
    songElapsedTime = (TextView) findViewById(R.id.song_elapsed_time);
    songDuration = (TextView) findViewById(R.id.song_duration);
    progressBar = (SeekBar) findViewById(R.id.song_progress);
    progressBar.setOnSeekBarChangeListener(this);
    circleImageView = (ImageView) findViewById(R.id.album_art);
    album_art_blurred = (ImageView) findViewById(R.id.album_art_blurred);
    title = (TextView) findViewById(R.id.song_title);
    artist = (TextView) findViewById(R.id.song_artist);
    mPlayPause = (PlayPauseButton) findViewById(R.id.playpause);
    download = (ImageView) findViewById(R.id.download);
    if (SornaDownloadManager.inQueue) {
        if (SornaDownloadManager.checkDownloadId(media.getId())) {
            download.setVisibility(View.GONE);
            downloadProgressView.show(SornaDownloadManager.lastDownloadID,
                    new DownloadProgressView.DownloadStatusListener() {
                        @Override
                        public void downloadFailed(int reason) {
                            SornaDownloadManager.PullFromQueue(media.getId());
                            download.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void downloadSuccessful() {
                            SornaDownloadManager.PullFromQueue(media.getId());
                            download.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void downloadCancelled() {
                            SornaDownloadManager.PullFromQueue(media.getId());
                            download.setVisibility(View.VISIBLE);
                        }
                    });
        }
    }
}

//______________________________________________________________________________________________
//_________________________________Cache_and_UpdateProgressBar__________________________________
private void checkCachedState(String url) {
    HttpProxyCacheServer proxy = TimberApp.getProxy(this);
    boolean fullyCached = proxy.isCached(url);
    if (fullyCached) {
        progressBar.setSecondaryProgress(100);
    }
    proxy.registerCacheListener(this, url);
}

private void updateVideoProgress() {
    if (mPlayerService != null)
        try {
            videoProgress = (int) (mPlayerService.getExoPlayer().getCurrentPosition() * 100 / mPlayerService.getExoPlayer().getDuration());
        } catch (Exception e) {

        }
    progressBar.setProgress(videoProgress);
}

private final class VideoProgressUpdater extends Handler {

    public void start() {
        sendEmptyMessage(0);
    }

    public void stop() {
        removeMessages(0);
    }

    @Override
    public void handleMessage(Message msg) {

        updateVideoProgress();
        sendEmptyMessageDelayed(0, 500);
        if (mPlayerService != null) {
            try {
                songElapsed = (int) mPlayerService.getExoPlayer().getCurrentPosition();
                songDurationTime = (int) mPlayerService.getExoPlayer().getDuration();
            } catch (Exception e) {

            }
        }
        songElapsedTime.setText(millisecondsTOminutes.milliSecondsToTimer(songElapsed));
        songDuration.setText(millisecondsTOminutes.milliSecondsToTimer(songDurationTime));
    }
}

@Override
public void onCacheAvailable(File cacheFile, String url, int percentsAvailable) {
    progressBar.setSecondaryProgress(percentsAvailable);
}

@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

void seekVideo() {
    int videoPosition = (int) (mPlayerService.getExoPlayer().getDuration() * progressBar.getProgress() / 100);
    mPlayerService.getExoPlayer().seekTo(videoPosition);
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
    seekVideo();
    songElapsedTime.setText(millisecondsTOminutes.milliSecondsToTimer(mPlayerService.getExoPlayer().getCurrentPosition()) + "");
}

//______________________________________________________________________________________________
//____________________________________setButtonsFuction_________________________________________
public void setFunc(View v) {
    switch (v.getId()) {
        case R.id.playpause:
            if (!mPlayPause.isPlayed()) {
                setPlayButton(true);
                if (!startService) {
                    setStopService();
                    setStartService();
                    onlinePlay(media.getId());
                } else {
                    mPlayerService.playTrack();
                }
            } else {
                setPlayButton(false);
                mPlayerService.pauseTrack();
            }
            break;
        case R.id.next:
            mPlayerService.nextTrack();
            //positionOfMusic = mPlayerService.getPlayingMedia();
            break;
        case R.id.previous:
            mPlayerService.previousTrack();
            //positionOfMusic = mPlayerService.getPlayingMedia();
            break;
        case R.id.download:
            showPopup(media);
            break;
        case R.id.share:
            share.shareTrack(media, this);
            break;
    }
}

public void showPopup(final Media media) {
    View popupView = LayoutInflater.from(this).inflate(R.layout.popup_layout, null);
    final PopupWindow popupWindow = new PopupWindow(popupView, WindowManager.LayoutParams.MATCH_PARENT
            , WindowManager.LayoutParams.MATCH_PARENT);
    popupWindow.setOutsideTouchable(false);
    popupWindow.setFocusable(true);
    popupWindow.showAtLocation(popupView, Gravity.CENTER, 1, 1);
    Button dnlow = (Button) popupView.findViewById(R.id.dnlow);
    Button dnhigh = (Button) popupView.findViewById(R.id.dnhigh);
    if (media.getDownloadLinksList128().matches("noLink"))
        dnlow.setVisibility(View.GONE);
    if (media.getDownloadLinksList320().matches("noLink"))
        dnhigh.setVisibility(View.GONE);
    dnlow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SornaDownloadManager sornaDownloadManager = SornaDownloadManager.getInstance(getApplicationContext());
            long downloadID = sornaDownloadManager.AddForDownload(media.getDownloadLinksList128(),
                    media.getTitleMedia() + "-" + media.getSingerName(), media.getId());
            downloadProgressView.show(downloadID, new DownloadProgressView.DownloadStatusListener() {
                @Override
                public void downloadFailed(int reason) {

                }

                @Override
                public void downloadSuccessful() {
                    SornaDownloadManager.PullFromQueue(media.getId());
                    download.setVisibility(View.VISIBLE);
                }

                @Override
                public void downloadCancelled() {
                    SornaDownloadManager.PullFromQueue(media.getId());
                    download.setVisibility(View.VISIBLE);
                }
            });
            popupWindow.dismiss();
        }
    });

    dnhigh.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SornaDownloadManager sornaDownloadManager = SornaDownloadManager.getInstance(getApplicationContext());
            long downloadID = sornaDownloadManager.AddForDownload(media.getDownloadLinksList320(),
                    media.getTitleMedia() + "-" + media.getSingerName(), media.getId());
            downloadProgressView.show(downloadID, new DownloadProgressView.DownloadStatusListener() {
                @Override
                public void downloadFailed(int reason) {

                }

                @Override
                public void downloadSuccessful() {
                    SornaDownloadManager.PullFromQueue(media.getId());
                    download.setVisibility(View.VISIBLE);
                }

                @Override
                public void downloadCancelled() {
                    SornaDownloadManager.PullFromQueue(media.getId());
                    download.setVisibility(View.VISIBLE);
                }
            });
            popupWindow.dismiss();
        }

    });

    popupWindow.showAsDropDown(popupView, 0, 0);
}

//______________________________________________________________________________________________
//__________________________________GetDataFromServer___________________________________________
public void Serach(String searchQuery, String page) {
    updateData();
    volleyRequestHelper.RequestFetchSearchMedia
            (constantsURL.REQUEST_FETCH_SIMILAR_SONGS, searchQuery, page, false);
}

public void getAlbumTrack(String albumId) {
    updateData();
    volleyRequestHelper.RequestFetchAlbumTrack
            (constantsURL.REQUEST_FETCH_ALBUM_TRACKS, albumId, false);
}

public void selectMedia(final Media media) {
    if (!constants.refLogId.matches(""))
        volleyRequestHelper.requestSetLog
                (constantsURL.REQUEST_SET_LOG, "selectSearchResult", media.getId(), constants.refLogId, false);
}

public void onlinePlay(final String mediaid) {
    volleyRequestHelper.requestSetLog
            (constantsURL.REQUEST_SET_LOG, "onlinePlay", mediaid, constants.refLogId, false);
}

public void updateData() {
    similarSongsAdapter.notifyDataSetChanged();
    similarSongsAdapter.setLoaded();
}

public void parseJson(String response, List<Media> arrayList) {
    try {
        JsonParser parser = new JsonParser();
        JsonElement json = parser.parse(response);
        JSONObject jsonObject = new JSONObject(String.valueOf(json));
        JSONArray arrey = jsonObject.getJSONArray("result");
        if (!media.getCustomMediaType().matches("آلبوم"))
            arrayList.add(media);
        for (int i = 0; i < arrey.length(); i++) {
            JSONObject j = arrey.getJSONObject(i);
            Media mdia = new Media(j);
            if (!media.getId().matches(mdia.getId()) && !mdia.getCustomMediaType().matches("آلبوم"))
                arrayList.add(mdia);
        }
    } catch (Exception e) {

    }
    if (mPlayerService != null) {
        mPlayerService.setOnlineList(similarSongsList);
    }
}

private VolleyRequestHelper.OnRequestCompletedListener requestCompletedListener =
        new VolleyRequestHelper.OnRequestCompletedListener() {
            @Override
            public void onRequestCompleted(String requestName, boolean status,
                                           String response, String errorMessage) {
                //homeView.hideProgress();
                switch (requestName) {
                    case "SIMILAR_SONGS":
                        if (status) {
                            parseJson(response, similarSongsList);
                            updateData();
                        }
                        break;
                    case "ALBUM_TRACKS":
                        if (status) {
                            parseJson(response, similarSongsList);
                            updateData();
                            if (initAlbum) {
                                setMedia(similarSongsList.get(0));
                            }
                        }
                        break;
                }
            }
        };

//_______________________________________EXOPLAYER______________________________________________
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {

}

@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
    if (checkChangeMediaDetails) {
        musicChange(mPlayerService.getPlayingMedia());
    } else checkChangeMediaDetails = true;


}

@Override
public void onLoadingChanged(boolean isLoading) {

}

@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
    if ((playbackState == Player.STATE_READY) && playWhenReady) {
        if (!mPlayPause.isPlayed()) {
            setPlayButton(true);
        }

    } else if ((playbackState == Player.STATE_READY)) {
        setPlayButton(false);
    } else if (playbackState == Player.STATE_ENDED) {

    }
}

@Override
public void onRepeatModeChanged(int repeatMode) {

}

@Override
public void onPlayerError(ExoPlaybackException error) {

}

@Override
public void onPositionDiscontinuity() {

}

@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {

}

//______________________________________________________________________________________________
public void setStartService() {
    Intent intent = new Intent(this, PlayerService.class);
    bindService(intent, this, Context.BIND_AUTO_CREATE);
    startService(intent);
    startService = true;
}

public void setStopService() {
    Intent intentStop = new Intent(this, PlayerService.class);
    stopService(intentStop);
}

public void setPlayButton(boolean playButton) {
    mPlayPause.setPlayed(playButton);
    mPlayPause.startAnimation();
}

public void setMusicInService(Media mMedia, int position) {
    positionOfMusic = position;
    if (mPlayerService != null) {
        mPlayerService.setPlayMedia(mMedia, position);
    } else {
        setStartService();
        setMedia(mMedia);
    }
    //positionOfMusic = position;
    /*if (mPlayerService != null) {
        mPlayerService.setMediaUri(mMedia.getStreamUrl());
        mPlayerService.setMedia(mMedia);
        mPlayerService.setPlayingMedia(position);
        mPlayerService.preparePlayer();
    } else {
        positionOfMusic = position;
        setStartService();
        setMedia(mMedia);
    }*/
}

public void musicChange(int newPosition) {
    if (similarSongsList != null && similarSongsList.size() != 0) {
        setMedia(similarSongsList.get(newPosition));
        similarSongsAdapter.setPlayPosition(newPosition);
        similarSongsAdapter.notifyDataSetChanged();
    }
}

}

1 个答案:

答案 0 :(得分:0)

{{1}}