簡體   English   中英

帶有進度條的Android音樂播放器通知

[英]Android Music Player Notification with Progress Bar

我正在開發帶有進度條的音樂播放器通知。 我設法以某種方式設法顯示了Handler的進度,但現在的問題是一段時間后整個android系統死機了。 然后重新啟動系統只是解決方案。 我是android的新手,這是我的第一個應用程序,請幫助我完成我的第一個應用程序。 我會非常感謝你。

這是帶有進度條的音樂播放器通知的屏幕截圖

我已經附上了通知的屏幕截圖,這是我的代碼。 這些代碼在Media Player前台服務中運行

一些全局變量:

    private static RemoteViews views;
    private static RemoteViews bigViews;
    private static Notification status;
    private static final int NOTIFICATION_ID = 101;
    public Handler mSeekbarUpdateHandler= new Handler();

這是可運行的代碼:

public Runnable mUpdateseekbar=new Runnable() {
@Override
public void run() {
    if(mediaPlayer != null) {
        bigViews.setProgressBar(R.id.progressBar, mediaPlayer.getDuration(), mediaPlayer.getCurrentPosition(), false);

        bigViews.setTextViewText(R.id.time_start, timeConvert(mediaPlayer.getCurrentPosition()));
    }

  startForeground(NOTIFICATION_ID, status);

   mSeekbarUpdateHandler.postDelayed(this,1000);
}};

現在調用處理程序:

@Override
public void onPlay() {

super.onPlay();
resumeMedia();

buildNotification(PlaybackStatus.PLAYING);

mSeekbarUpdateHandler.postDelayed(mUpdateseekbar,0);

//also calling this Handler  from method onSkipToNext() and previous. it means when changing song also calling Handler each time.

最后構建通知代碼:

    private void buildNotification(PlaybackStatus playbackStatus)
     {
    //This section containing long code which works fine so no need to make post longer. 

    }

幾分鍾后運行此代碼時,系統變慢並最終凍結。 刪除處理程序后,通知中沒有問題,但進度條未更新。

}

每次在Runnable中重新構建整個通知時,我已經成功解決了此問題。我已將以下Runnable代碼替換為以下代碼...

 public Runnable mUpdateseekbar = new Runnable() {
    @Override
    public void run() {
        if (mediaPlayer.isPlaying()) {



            buildNotification(PlaybackStatus.PLAYING);

                       }


        mSeekbarUpdateHandler.postDelayed(this, 1000);
    }
};

這是buildNotification方法。

   private void buildNotification(PlaybackStatus playbackStatus) {
    RemoteViews views;
    RemoteViews bigViews;
    Notification status;

    try {

        int notificationAction = android.R.drawable.ic_media_pause;
        PendingIntent play_pauseAction = null;


        if (playbackStatus == PlaybackStatus.PLAYING) {
            notificationAction = R.drawable.noty_pause;
            play_pauseAction = playbackAction(1);


        } else if (playbackStatus == PlaybackStatus.PAUSED) {

            notificationAction = R.drawable.noty_play;
            play_pauseAction = playbackAction(0);


        }


        views = new RemoteViews(getPackageName(),
                R.layout.status_bar);

        bigViews = new RemoteViews(getPackageName(),
                R.layout.status_bar_expanded);


        views.setImageViewBitmap(R.id.status_bar_album_art,
                largeIcon);

        bigViews.setImageViewBitmap(R.id.status_bar_album_art,
                largeIcon);


        views.setImageViewResource(R.id.status_bar_playPause,
                notificationAction);

        bigViews.setImageViewResource(R.id.status_bar_play,
                notificationAction);

        bigViews.setProgressBar(R.id.progressBar, mediaPlayer.getDuration(), mediaPlayer.getCurrentPosition(), false);

        views.setTextViewText(R.id.status_bar_track_name, activeAudio.getTitle());
        bigViews.setTextViewText(R.id.status_bar_track_name, activeAudio.getTitle());

        views.setTextViewText(R.id.status_bar_artist_name, activeAudio.getAlbum() + "-" + activeAudio.getArtist());
        bigViews.setTextViewText(R.id.status_bar_artist_name, activeAudio.getAlbum() + "-" + activeAudio.getArtist());

        views.setTextViewText(R.id.status_bar_metadata, displayMeta);
        bigViews.setTextViewText(R.id.status_bar_album_name, displayMeta);
        bigViews.setTextViewText(R.id.track_num, (audioIndex + 1) + "/" + audioList.size());

        bigViews.setTextViewText(R.id.end_time, timeConvert(mediaPlayer.getDuration()));

        bigViews.setTextViewText(R.id.time_start, timeConvert(mediaPlayer.getCurrentPosition()));


        views.setOnClickPendingIntent(R.id.status_bar_playPause, play_pauseAction);
        bigViews.setOnClickPendingIntent(R.id.status_bar_play, play_pauseAction);

        views.setOnClickPendingIntent(R.id.status_bar_next, playbackAction(2));
        bigViews.setOnClickPendingIntent(R.id.status_bar_next, playbackAction(2));

        views.setOnClickPendingIntent(R.id.status_bar_previous, playbackAction(3));
        bigViews.setOnClickPendingIntent(R.id.status_bar_prev, playbackAction(3));
        bigViews.setOnClickPendingIntent(R.id.status_bar_ff, playbackAction(5));
        bigViews.setOnClickPendingIntent(R.id.status_bar_rev, playbackAction(6));

        bigViews.setOnClickPendingIntent(R.id.status_bar_collapse, playbackAction(4));
        views.setOnClickPendingIntent(R.id.status_stop,playbackAction(4));


        status = new Notification.Builder(this).build();
        status.contentView = views;
        status.bigContentView = bigViews;
        status.flags = Notification.FLAG_ONGOING_EVENT;

        status.visibility = Notification.VISIBILITY_PUBLIC;
        status.tickerText = activeAudio.getTitle();


        if (playbackStatus==PlaybackStatus.PLAYING) {
            status.icon = R.drawable.notyskeep;
        } else {
            status.icon = R.drawable.noty_small_blue;
        }
        status.priority = Notification.PRIORITY_MAX;
        status.contentIntent = playbackAction(8);
        startForeground(NOTIFICATION_ID, status);


    } catch (Throwable e) {
        Toast.makeText(getApplicationContext(), "Exception raised:" + e, Toast.LENGTH_LONG).show();

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM